pandas中的嵌套条件导致ValueError: Series的真值有歧义



pandas数据框架为:

df = pd.DataFrame([['A', 1, 20], ['A', 2, 30], ['B', 1, 50], ['B', 3, 45], ['A', 4, 60], ['B', 5, 70]])
df.columns = ['Type', 'P', 'X']
p>
Type  P   X
0    A  1  20
1    A  2  30
2    B  1  50
3    B  3  45
4    A  4  60
5    B  5  70

期望:

我想应用嵌套条件来计算一个值,并将其作为新列追加。

我是这样做的:

result = 0
if (df.Type == 'A'):
if df.P % 2 == 0:
result = df.X+10
else:
restult = df.X+20
else:
if df.P % 2 == 0:
result = df.X+30
else:
result = df.X+40
df['Result'] = result

期望输出为:

Type  P   X   Result
0    A  1  20   40
1    A  2  30   40
2    B  1  50   90
3    B  3  45   85
4    A  4  60   70
5    B  5  70   110

但是它失败了,错误:ValueError: Series的真值是模棱两可的。使用a.empty a.bool (), a.item (), a.any()或所有()。

我已经挖了其他的线程,但他们似乎是其他问题。

欢迎提出任何建议

使用np.select(listof conditions, listofchoices, alternative)

condition=[(df.Type == 'A')&(df.P % 2 != 0),(df.Type == 'A')&(df.P % 2 == 0), (df.Type == 'B')&(df.P % 2 == 0)]

choices= [df.X+20,df.X+10,df.X+30]
df['result'] = np.select(condition, choices,df.X+40)
Type  P   X  result
0    A  1  20      40
1    A  2  30      40
2    B  1  50      90
3    B  3  45      85
4    A  4  60      70
5    B  5  70     110

if算子不是矢量化的,不能与Series一起使用,用np.select代替:

type_a, p_even = df.Type == 'A', df.P % 2 == 0
amount = np.select(
[type_a & p_even, type_a & ~p_even, ~type_a & p_even, ~type_a & ~p_even], 
[10, 20, 30, 40]
)
df['Result'] = df.X + amount
df
Type  P   X  Result
0    A  1  20      40
1    A  2  30      40
2    B  1  50      90
3    B  3  45      85
4    A  4  60      70
5    B  5  70     110

最新更新