我想在我的熊猫使用多个条件,但我收到以下错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty,
a.bool(), a.item(), a.any() or a.all().
按照此thread,我用按位运算符替换了and
,但仍然出现错误。
import pandas as pd
d1 = {'Year': [2019,2019,2019,2019,2019], 'Week':[1,2,4,6,7], 'Value':
[20,40,60,75,90]}
df1 = pd.DataFrame(data=d1)
if (df1['Year'] == df1['Year'].shift(-1)) & \
(df1['Week'] == df1['Week'].shift(-1)):
print('Yes')
else:
print('No')
在这里我可能做错了什么?
答案 0 :(得分:3)
实际的比较检查并不正确,但不适用于常规Python if
,因为Pandas以矢量化方式工作。正如我在有关错误的评论中所说:
Python应该对
if [1, 2, 3] and [2, 3, 4]:
说些什么?那将是True
但它不会告诉您有关单个行的任何信息( 列表)
使用np.where
。
df1['comparison'] = np.where((df1['Year'] == df1['Year'].shift(-1)) &
(df1['Week'] == df1['Week'].shift(-1)), 'Yes', 'No')
答案 1 :(得分:3)
您可以使用np.where
,它会根据条件是否满足产生Yes
或No
:
c1 = df1.Year == df1.Year.shift(-1)
c2 = df1.Week == df1.Week.shift(-1)
df1.loc[:,'is_repeated'] = np.where(c1&c2, 'Yes', 'No')
Year Week Value is_repeated
0 2019 1 20 No
1 2019 2 40 No
2 2019 4 60 No
3 2019 6 75 No
4 2019 7 90 No
答案 2 :(得分:0)
我对按位运算符不是很确定,但是要比较数组,可以一起使用equals
方法和逻辑and
,我认为这样会更容易。
例如,您可以将循环条件修改为:
if df1['Year'].equals(df1['Year'].shift(-1)) and df1['Week'].equals(df1['Week'].shift(-1)):