繁体   English   中英

如何使用for循环获取pandas数据帧所有列中的总重复数?

[英]how to use for loop to get number of total duplicates in all columns of a pandas dataframe?

数据框示例: https ://www.screencast.com/t/6bxST8Fn

我正在尝试查找 Pandas 数据框的每一列中存在多少重复记录。 我以为我可以简单地在如下所示的 for 循环中使用df.[column name].duplicated().sum()代码,但是对于duplicated()却出现了无效的语法错误。

for column in df.columns:
    df[column].duplicated().sum()

我的具体目标:有人能告诉我什么是正确的语法吗? 但是,如果我执行此操作的方法完全不正确,那么可以完成相同操作的 for 循环的替代方法是什么?

我希望得到以下格式的输出:列名:列中重复的总数

另一个简单的解决方案将基于值计数来摆脱 for 循环。

df = pd.DataFrame({'Car': ['M', 'M', 'T', 'T', 'T', 'C'],'TV':['So','Su','So', 'So','T','So'],'Computer': ['D','Hp','Ap','Ac','S','H']})


x = df.apply(pd.Series.value_counts)
dupes_count = x[x>1].fillna(0).sum().to_dict()

输出:

{'Car': 5, 'Computer': 0, 'TV': 4}

您可以使用value_counts首先apply于所有列,然后更换独特的( 1 )值0sum

df = pd.DataFrame({'Car': list('MMTTCT'),
                  'Computer':list('abbbbc'),
                  'TV':list('aaabbb')})

print (df.apply(pd.value_counts))
   Car  Computer   TV
C  1.0       NaN  NaN
M  2.0       NaN  NaN
T  3.0       NaN  NaN
a  NaN       1.0  3.0
b  NaN       4.0  3.0
c  NaN       1.0  NaN

dupes = df.apply(pd.value_counts).replace(1,0).sum().astype(int).to_dict()
print (dupes)
 {'Car': 5, 'TV': 6, 'Computer': 4}

您可以对所有列进行分组并调用 size 索引指示重复值:

df.groupby(df.columns.tolist(),as_index=False).size()

one    three  two  
False  False  True     1
True   False  False    2
       True   True     1
dtype: int64

这是一种方法:

import pandas as pd

df = pd.DataFrame({'Car': ['M', 'M', 'T', 'T', 'C']})

dupes = {}

for c in df:
    gb = df.groupby(c).size()
    dupes[c] = gb[gb > 1].sum()

dupes现在是:

>>> dupes
{'Car': 4}

只需将该逻辑应用于您的完整数据框。

for column in df.columns:
    duplicate_column = df[column].duplicated().sum()
    print(column,': ', duplicate_column)

这对我有用。

暂无
暂无

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

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