删除一列中相同但另一列中不同的所有数据帧条目



考虑这个pandas数据帧:

df = pd.DataFrame({'animal': ["dog", "dog", "dog", "cat", "snake", "dog", "snake", "cat", "goat", "bird"],
'label': [0, 0, 0, 1, 0, 1, 0, 1, 1, 1]})

我想删除标签与所有动物不匹配的全部条目。例如,dog被标记了三次"0",但第四次被标记为"1",所以我想删除所有dog条目。对于其他动物,它们都有相应的标签,因此我想保留其余的,这样剩下的数据帧将是:

df2 = pd.DataFrame({'Column1': ["cat", "snake", "snake", "cat", "goat", "bird"],
'label': [1, 0, 0, 1, 1, 1]})

感谢您的帮助。

我会使用transform来获得每个组的一系列唯一值,并通过检查等于1来计算布尔掩码。

mask = df.groupby('animal')['label'].transform('nunique').eq(1)
result = df[mask]

详细信息:

>>> df.groupby('animal')['label'].transform('nunique')
0    2
1    2
2    2
3    1
4    1
5    2
6    1
7    1
8    1
9    1
Name: label, dtype: int64
>>> df.groupby('animal')['label'].transform('nunique').eq(1)
0    False
1    False
2    False
3     True
4     True
5    False
6     True
7     True
8     True
9     True
Name: label, dtype: bool

使用groupby+transform('nunique')来获取每个组的唯一值计数。

如果计数为1,则使用布尔索引保持行:

df2 = df[df.groupby('animal')['label'].transform('nunique').eq(1)]

输出:

animal  label
3    cat      1
4  snake      0
6  snake      0
7    cat      1
8   goat      1
9   bird      1

最新更新