将功能应用于两列熊猫

时间:2018-10-16 07:46:21

标签: python pandas apply

我正在尝试将计算R2得分的函数应用于熊猫数据框的两列。如果首先我将其他列分组,那么它会起作用,但是当将其应用于整个数据框时,它将失败。

这是有效的代码:

from sklearn.metrics import r2_score
df = pd.DataFrame({'cat':['A','A','B','B'], 'num1':[.1,.2,.3,.4], 
'num2': [.1,.2,.3,.4]})

df.groupby('cat').apply(lambda x: r2_score(x['num1'],x['num2']))

具有以下输出:

cat
A    1.0
B    1.0
dtype: float64

但这不起作用:

df.apply(lambda x: r2_score(x['num1'],x['num2']))

有关键错误:     KeyError :(“ num1”,“发生在索引猫处”)

谁能解释为什么这样的情况才能澄清apply函数的内部工作原理,并为后者的应用提供解决方案?

2 个答案:

答案 0 :(得分:1)

我相信您需要传递列才能起作用:

a = r2_score(df['num1'],df['num2'])
print (a)
1.0

答案 1 :(得分:0)

如果我正确理解了您的需求,则应指定每行运行“ apply”,因此axis = 1:

df.apply(lambda x: r2_score(x['num1'],x['num2']), axis=1)

您的代码尝试在列上垂直运行它,并且找不到相关的键。

但是请注意,这并不等同于您对分组所做的操作。因此,由您自己决定要执行的操作。

在此处查看文档:{​​{3}}