gpt4 book ai didi

python - (Pandas) 删除由 GroupBy 创建的重复组

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:39 24 4
gpt4 key购买 nike

我想通过自定义 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

最佳答案

使用agg tupleduplicated

s=df.groupby('id').agg(tuple).sum(1).duplicated()
df.loc[df.id.isin(s[~s].index)]
Out[779]:
id A B
0 1 foo 40
1 1 bar 50
2 2 foo 40
3 2 bar 50
4 2 cod 0

更多信息:现在,组内的所有内容都在一个 tuple

df.groupby('id').agg(tuple).sum(1)
Out[780]:
id
1 (foo, bar, 40, 50)
2 (foo, bar, cod, 40, 50, 0)
3 (foo, bar, 40, 50)
dtype: object

更新

from natsort import natsorted
s=df.groupby('id').agg(tuple).sum(1).map(natsorted).map(tuple).duplicated()

关于python - (Pandas) 删除由 GroupBy 创建的重复组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53597194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com