我正在尝试将计算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函数的内部工作原理,并为后者的应用提供解决方案?
答案 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}}