首页 > 解决方案 > 从熊猫数据框中提取重复

问题描述

我有一张桌子:

name       signature
XXX          DA
XXX          DB
XXX          DC
YYY          DA
YYY          DB
YYY          DC
XXX          DA
XXX          DE
CCC          AA
CCC          AB

正如你所看到的,我在表中有重复 - 名称 col 是用户的名称。签名是一个代码。我需要从此数据框中删除并将所有重复的临时数据框放入临时数据框中,但在特殊情况下。

如果在数据框中重复name并且signature-name应删除所有重复的记录并将其放入另一个数据框中。

所以根据上面的数据框,new_data 应该是:

   name       signature
    YYY          DA
    YYY          DB
    YYY          DC
    CCC          AA
    CCC          AB

以及具有重复值的新数据框:

   name       signature
    XXX          DA
    XXX          DB
    XXX          DC
    XXX          DA
    XXX          DE

我能以最好的方式做什么?我在谷歌和 SO 中寻找好的建议,但没有发现任何帮助。

我只是这样做了,for loop但问题是尺寸很大。我的数据框有 15 000 000 条记录。所以我需要做得更快。当然 pandas 或 python 有一个我没有找到的更快的方法。有人可以帮我解决这个问题吗?

标签: pythonpandasdataframe

解决方案


使用DataFrame.duplicatedfor 获取重复的 s 并通过with for membersname过滤原始:DataFrameSeries.isinboolean indexing

vals = df.loc[df.duplicated(['name','signature']), 'name'].unique()
mask = df['name'].isin(vals)

df1 = df[~mask]
df2 = df[mask]

print (df1)
  name signature
3  YYY        DA
4  YYY        DB
5  YYY        DC
8  CCC        AA
9  CCC        AB

print (df2)
  name signature
0  XXX        DA
1  XXX        DB
2  XXX        DC
6  XXX        DA
7  XXX        DE

推荐阅读