在 Pandas 数据框中使用 Lambda 时,如何正确引用另一个列值。

dfresult_tmp2['Retention_Rolling_temp'] = dfresult_tmp2['Retention_tmp'].apply(lambda x: x if x['Count Billings']/4 < 0.20 else '')

上面的代码给了我这个错误。
TypeError: 'float' object is not subscriptable

最佳答案

dfresult_tmp2['Retention_tmp'].apply(
    lambda x: x if x['Count Billings'] / 4 < 0.20 else ''
)
您正在使用与 pd.Series.apply 不同的 pd.DataFrame.apply 。在这种情况下,您迭代地将标量值传递给 lambda。所以 some_scalar_x['Count Billings'] 没有意义。
我不会告诉您如何将您的逻辑硬塞进 apply ,而是向您展示矢量化版本
选项 1 pd.Series.where
dfresult_tmp2['Retention_tmp'] = \
    dfresult_tmp2['Retention_tmp'].where(
        dfresult_tmp2['Count Billings'] / 4 < .2, '')
选项 2 np.where
r = dfresult_tmp2['Retention_tmp'].values
b = dfresult_tmp2['Count Billings'].values
dfresult_tmp2['Retention_tmp'] = np.where(b / 4 < .2, r, '')
选项 3 apply你要求的但不是我推荐的。
dfresult_tmp2['Retention_tmp'] = dfresult_tmp2.apply(
    lambda x: x['Retention_tmp'] if x['Count Billings'] / 4 < .2 else '',
    axis=1
)

关于python - Lambda 数据框引用另一列中的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44577622/

10-13 09:46