python3lambda错误:序列的真值不明确

2024-09-29 21:46:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在lambda函数中得到这个错误:The truth value of a Series is ambiguous。我知道这里有一个关于这个错误的非常全面的解释,但我不认为这与我的问题有关: Truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

基本上,我试图通过lambda来确定在同一AccountID中,从一个月到下一个月,OpenBal是否相同,如果相同,则给我一个“1”(例如下面的OpenBal=101)。很明显,第一张唱片应该给我一个NaN。(请注意,感谢@jdehesa在我的另一篇文章中给出的答案)。在

这说明了我的问题:

import pandas as pd
df = pd.DataFrame({'AccountID': [1,1,1,1,2,2,2,2,2],
                   'RefMonth':    [1,2,3,4,1,2,3,4,5],
                   'OpenBal':    [100,101,101,103,200,201,202,203,204]})
SameBal = df.groupby('AccountID').apply(lambda g: 1 if g['OpenBal'].diff() == 0 else 0)
df['SameBal'] = SameBal.sortlevel(1).values

Tags: ofthelambda函数dfisvalue错误
2条回答

你的错误正确地表明你不能检查序列的真实性。但是自定义匿名函数对于这个任务不是必需的。在

groupby+transformpd.Series.diff一起使用:

import pandas as pd

df = pd.DataFrame({'AccountID': [1,1,1,1,2,2,2,2,2],
                   'RefMonth':    [1,2,3,4,1,2,3,4,5],
                   'OpenBal':    [100,101,101,103,200,201,202,203,204]})

df['A'] = (df.groupby('AccountID')['OpenBal'].transform(pd.Series.diff)==0).astype(int)

print(df)

   AccountID  OpenBal  RefMonth   A
0          1      100         1   0
1          1      101         2   0
2          1      101         3   1
3          1      103         4   0
4          2      200         1   0
5          2      201         2   0
6          2      202         3   0
7          2      203         4   0
8          2      204         5   0

如果每个组的第一行需要NaN

^{pr2}$

1 if g['OpenBal'].diff() == 0不工作。这不是pd.Series()对象的操作方式

您需要创建一个合适的方法:

def convert(a):
    return np.array([1 if i==0 else np.nan if pd.isnull(i) else 0 for i in a])

这将解决The truth value of a Series is ambiguous错误

^{pr2}$

相关问题 更多 >

    热门问题