【发布时间】:2019-05-04 22:48:17
【问题描述】:
我想通过自定义 ID 创建组,然后消除某些列中重复的组。
例如
| id | A | B |
|----|-----|----|
| 1 | foo | 40 |
| 1 | bar | 50 |
| 2 | foo | 40 |
| 2 | bar | 50 |
| 2 | cod | 0 |
| 3 | foo | 40 |
| 3 | bar | 50 |
到
| id | A | B |
|----|-----|----|
| 1 | foo | 40 |
| 1 | bar | 50 |
| 2 | foo | 40 |
| 2 | bar | 50 |
| 2 | cod | 0 |
这里我按 id 分组,然后我删除了 3,因为如果我们只考虑 A 列和 B 列,它们是相同的,而第 2 组有一些重复的行,但不是精确的副本。
我尝试过循环组,但即使只有大约 12.000 个组,它也非常慢。一种可能的复杂情况是组的大小可变。
这是我一直在研究的解决方案,但它需要很长时间,没有明显的重复点击(我知道这个数据库中存在)
grps = datafinal.groupby('Form_id')
unique_grps={}
first=True
for lab1, grp1 in grps:
if first:
unique_grps[lab1] = grp1
first=False
continue
for lab2, grp2 in unique_grps.copy().items():
if grp2[['A','B']].equals(grp1[['A','B']]):
print("hit")
continue
unique_grps[lab1] = grp1
【问题讨论】:
-
你不能只删除重复的 w.r.t 吗?先列 A 和 B?
-
@timgeb 我认为这行不通。想象第 2 组有第 3 组的 1 行,第 1 组有其他行。
drop_duplicates将删除第 3 组,即使它没有被一组完全复制。 -
@timgeb 将删除第 2 组的前两行,我需要保留。
-
啊,好的,谢谢你的澄清。
-
您可以在结果 DF 上使用内置的 drop duplicates 子集为
'A', 'B'吗?
标签: python pandas pandas-groupby data-manipulation