如何在 Pandas 中使用 df.apply 将一行传递给函数

问题描述 投票:0回答:1

我有一个相当复杂的函数,需要在数据帧的每一行上运行 - lambda 函数在这里不起作用

我想将多列从数据帧传递到函数。

在我的初始测试中,我尝试传递行并命名单个列(请注意,我的程序需要使用多个列),但收到以下错误消息

密钥错误:'rec_id'

我需要做什么才能将行传递给函数,以便我可以使用不同的列值(即 row.Name 或 row.rec_id?

一个简单的示例显示了我正在尝试做的事情:

def testapply(row):
    print(row)
    if row['rec_id']<863238:
        return "X"
    if row['rec_id']>863238 :
        return "Y"

    
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'rec_id': [2532, 863238, 2212]}
df = pd.DataFrame(data)
df.apply(testapply)

谢谢!

python pandas apply
1个回答
0
投票

您遇到的KeyError: 'rec_id'错误是因为您在使用df.apply()时没有正确指定传递给函数的参数。默认情况下,df.apply() 将整个 DataFrame 的每一列(而不是每一行)传递给函数,除非您显式指定 axis=1,这会按行应用函数。 此外,为了确保您可以访问每行的所有列,您应该使用 axis=1 参数,并且您可以使用 row['column_name'] 或 row.column_name 访问每行的特定列值。

修改后的代码:

import pandas as pd

def testapply(row):
    print(f"Processing row with rec_id: {row['rec_id']}")
    if row['rec_id'] < 863238:
        return "X"
    elif row['rec_id'] > 863238:
        return "Y"
    else:
        return "Z"  

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'rec_id': [2532, 863238, 2212]}
df = pd.DataFrame(data)


df['result'] = df.apply(testapply, axis=1)
print(df)
© www.soinside.com 2019 - 2024. All rights reserved.