我有一个数据框和一个函数,我想通过 pandas.apply 将其应用于多个列。目前我正在使用 for 循环,我想用一行代码替换它。
这是我的数据框:
d1 = {'id': [1, 1, 2], 'event': ['e', 'c', 'e'], 'var1': [1, 2, 2], 'time_difference': [0, 5, 2]}
df1 = pd.DataFrame(data=d1)
...
>> df1
id event var1 time_difference
0 1 e 1 0
1 1 c 2 5
2 2 e 2 2
这是我要应用的功能:
def merge_based_on_timelimit(row):
return row[column_of_interest] if row['time_difference'] <= 1\
else pd.NA
这些是我感兴趣的列(我想在其上应用函数):
columns_of_interest = ['event', 'var1']
目前,我正在通过 for 循环将我的函数应用于所有感兴趣的列:
for column_of_interest in columns_of_interest:
df1[column_of_interest] = df1.apply(merge_based_on_timelimit, axis=1)
但是,我正在寻找一种方法来跳过循环,而是将我的函数直接应用于所有感兴趣的列。我怎样才能做到这一点?到目前为止,我已经尝试了以下方法:
df1[columns_of_interest] = df1[columns_of_interest].apply(merge_based_on_timelimit, axis=1)
这返回了以下错误:
...
redcap[columns_of_interest] = redcap[columns_of_interest].apply(merge_based_on_timelimit, axis=1)
...
KeyError: 'time_difference'