Pandas错误结合Where子句中的条件

时间:2018-03-15 14:00:37

标签: python pandas

我有一个带有二进制标志值的列,如果有错误,我试图清理它。如果某个特定组同时拥有0和1,则会出错。我的规则是此列只能包含组中的0或1或1。我试图提出一个np.where()子句,以便我测试具有一个重复值的列的组,并且该组中该列的第一个值是&# 39; t 1.如果该组的第一个值不是1,并且存在混合值,则将该值全部翻转为0。

这是我尝试的内容:

df['Flag'] = np.where((df.groupby('CombBitSeq')['Flag'].transform('std') != 0) & (df.groupby('CombBitSeq')['Flag'].nth(0) != 1), 0, df['Flag'])

我得到的错误就是这个,而且我不确定这两个组合条件的长度是如何关闭1的:

ValueError: operands could not be broadcast together with shapes (336661,) () (336660,)

1 个答案:

答案 0 :(得分:1)

如果您想获得每个组的第一个项目并在整个数据框中进行翻译,请使用groupby + transform + head,而不是nth

df.groupby('CombBitSeq')['Flag'].transform('head', 1)

你的病情现在变成:

g = df.groupby('CombBitSeq')['Flag']    # let's compute this only once
df['Flag'] = np.where(
     g.transform('std').ne(0) & g.transform('head', 1).ne(1), 0, df['Flag']
)