将函数应用于两列熊猫



我正在尝试将计算 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']))

出现密钥错误: 键错误: ("num1", "发生在索引猫"(

谁能解释为什么会澄清应用函数的内部工作原理并为后者提供解决方案?

我相信你需要传递列才能运行:

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

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

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

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

但请注意,这并不等同于您对分组所做的。所以这取决于你到底想做什么。

请参阅此处的文档:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html

最新更新