python - 使用 pandas 查找不同组之间的重复行
问题描述
问题
考虑以下数据框:
data_so = {
'ID': [100, 100, 100, 200, 200, 300, 300, 300],
'letter': ['A','B','A','C','D','E','D','A'],
}
df_so = pandas.DataFrame (data_so, columns = ['ID', 'letter'])
我想获得一个新列,其中不同组中的所有重复项都是 True。同一组中的所有其他重复项应为 False。
我试过的
我试过使用
df_so['dup'] = df_so.duplicated(subset=['letter'], keep=False)
但结果不是我想要的:
第 1 组(第 0 行)中第一次出现 A 是True
因为在另一个组(第 7 行)中有重复项。但是,同一组(第 2 行)中所有其他出现的 A 应该是False
。
如果第 7 行被删除,那么第 0 行应该是False
因为 A 不再存在于任何其他组中。
解决方案
正如您在评论中澄清的那样,您需要在 current 旁边添加一个额外的掩码duplicated
m1 = df_so.duplicated(subset=['letter'], keep=False)
m2 = ~df_so.groupby('ID').letter.apply(lambda x: x.duplicated())
df_so['dup'] = m1 & m2
Out[157]:
ID letter dup
0 100 A True
1 100 B False
2 100 A False
3 200 C False
4 200 D True
5 300 E False
6 300 D True
7 300 A True
8 300 A False
注意:我row=8
在评论中添加了。
推荐阅读
- android - FlatList 未在屏幕上显示任何数据。只是显示空白屏幕没有任何错误
- db2 - DB2 是否提供类似 postgres 的咨询锁定功能
- android - 如何创建没有主键的实体的新实例?
- android - Method should have no parameters
- apache-kafka - How to limit number of records in Kafka-consumer
- python - python错误:ModuleNotFoundError:没有名为“NLTK”的模块
- python - How to apply clipping to trainable variables in TensorFlow
- php - 我们如何使用 eloquent 在 laravel 5.4 中选择和更新表?
- selenium - Selenium 中的 DOM 属性值
- angular - 角度-primeng-确认对话框不起作用