根据另一列的条件创建熊猫列

时间:2019-08-03 16:09:31

标签: python pandas

此表达式

df["column"].diff() != 0

给我熊猫系列的布尔值。我现在想要一列df["result"],其中100中每个True值都有一个df["column"]值,每个False都有0

我不明白为什么这行不通:

df["result"] = 100 if df["column"].diff() != 0 else 0

我知道我必须使用loc,但是从这里开始:

df.loc[df["column"].diff() != 0]

然后如何设置结果列?

2 个答案:

答案 0 :(得分:3)

此处最好按条件使用numpy.where来设置2个值,矢量化解法:

df["result"] = np.where(df["column"].diff() != 0, 100, 0)

您的代码:

df["result"] = 100 if df["column"].diff() != 0 else 0

不起作用,因为这里使用了1d数组(系列),所以不能使用标量解。

您还将获得:

  

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

这意味着没有明确的含义,df["column"].diff() != 0的布尔数组的标量输出是什么。

更多信息在Using if/truth statements with pandas

答案 1 :(得分:1)

也许您正在寻找这样的东西:

df.loc[df['column'].diff()!=0, 'Result'] = 100

在jezrael评论后编辑:

df['diff'] = df['column'].diff().fillna(0)
df.loc[df['diff'] != 0, 'Result'] = 100