当克劳斯

2024-06-16 11:10:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有二进制标志值的列,如果有错误,我会尝试清除它。如果某个特定组同时具有0和1,则会出现错误。我的规则是此列只能包含组中的0或1。我试图提出一个np.where()子句,这样我就可以测试具有一个重复值的列的组,并且该列在组中的第一个值不是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,)

Tags: df规则标志错误np二进制transformwhere
1条回答
网友
1楼 · 发布于 2024-06-16 11:10:59

如果要获取每个组的第一个项并在整个数据帧中转换该项,请使用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']
)

相关问题 更多 >