在Panda Dataframe中附加布尔列

时间:2015-06-18 10:07:44

标签: python pandas ipython-notebook

我正在学习大熊猫,并且在这里遇到了这个问题。

我创建了一个跟踪所有用户的数据框以及他们做某事的次数。

为了更好地理解我创建此示例的问题:

import pandas as pd
data = [
    {'username': 'me',  'bought_apples': 2, 'bought_pears': 0},
    {'username': 'you', 'bought_apples': 1, 'bought_pears': 1}
]
df = pd.DataFrame(data)
df['bought_something'] = df['bought_apples'] > 0 or df['bought_pears'] > 0

在最后一行中,我想添加一个列,指示用户是否已经购买了一些东西。

弹出此错误:

  

ValueError:系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

我理解熊猫系列(also explained here)中含糊不清的观点,但我无法将其与问题联系起来。

有趣的是,这是有效的

df['bought_something'] = df['bought_apples'] > 0

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:15)

您可以逐行调用sum并比较是否大于0

In [105]:
df['bought_something'] = df[['bought_apples','bought_pears']].sum(axis=1) > 0
df

Out[105]:
   bought_apples  bought_pears username bought_something
0              2             0       me             True
1              1             1      you             True

关于您的原始尝试,错误消息告诉您将标量与数组进行比较是不明确的,如果您想要or布尔条件,那么您需要使用逐位运算符|并根据运算符优先级将条件包装在括号中:

In [111]:
df['bought_something'] = ((df['bought_apples'] > 0) | (df['bought_pears'] > 0))
df

Out[111]:
   bought_apples  bought_pears username bought_something
0              2             0       me             True
1              1             1      you             True

答案 1 :(得分:2)

出现该错误的原因是您使用'或'加入'加入两个布尔向量而不是布尔标量。这就是它说它含糊不清的原因。