繁体   English   中英

我如何知道熊猫数据框中的重复行?

[英]How can I know which are the duplicated rows in a Pandas Data Frame?

我正在使用Pandas和函数duplicated()来检测哪些行相等:

import pandas as pd

d = {
    1: {'name': 'n1', 1: 10, 2: 20, 3: 30},
    2: {'name': 'n2', 1: 10, 2: 20, 3: 30},
    3: {'name': 'n3', 1: 11, 2: 21, 3: 30},
    4: {'name': 'n4', 1: 11, 2: 21, 3: 30},
    5: {'name': 'n5', 1: 12, 2: 22, 3: 30},
    6: {'name': 'n6', 1: 13, 2: 22, 3: 30},
    7: {'name': 'n7', 1: 14,        3: 35},
    8: {'name': 'n8',        2: 22, 3: 35},
}
pd.DataFrame.from_dict(d).transpose().set_index('name')

这给了我一个很好的数据框架,如下所示:

          1    2   3
name              
n1       10   20  30    # same as n2
n2       10   20  30    # same as n1
n3       11   21  30    # same as n4
n4       11   21  30    # same as n3
n5       12   22  30
n6       13   22  30
n7       14  NaN  35
n8      NaN   22  35

现在,我想对列相同的行进行分组。 也就是说,我希望熊猫告诉我行n1n2相等,所以n3n4也相等。

使用duplicated()我得到一些有趣的结果:

df[df.duplicated(keep=False)]
         1   2   3
name            
n1      10  20  30
n2      10  20  30
n3      11  21  30
n4      11  21  30

这是正确的,因为它显示了重复的行。 但是,我的目的是要了解哪些是那些列,以及哪些是重复的元组。 也就是说,我需要一个[(n1, n2), (n3,n4)] ,一个彼此重复的列表。 列表,字典,任何对我有用的信息以及它的信息。

我一直在浏览熊猫的文档,找不到类似的东西。 我用groupby()尝试了一下,但是没有任何合理的结果。

您可以按所有列使用groupby并将索引转换为每个组的列表,最后将Series转换为列表:

df1 = df[df.duplicated(keep=False)]

df1 = df1.groupby(df1.columns.tolist()).apply(lambda x: x.index.tolist()).values.tolist()
print (df1)
[['n1', 'n2'], ['n3', 'n4']]

详情:

print (df1.groupby(df1.columns.tolist()).apply(lambda x: x.index.tolist()))
1   2   3 
10  20  30    [n1, n2]
11  21  30    [n3, n4]
dtype: object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM