此表达式
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]
然后如何设置结果列?
答案 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
的布尔数组的标量输出是什么。
答案 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