Python 如何使用for循环获取数据帧所有列中的总重复数?
数据帧示例: 我试图找出一个数据帧的每列中存在多少重复记录。我想我可以简单地在下面这样的for循环中使用Python 如何使用for循环获取数据帧所有列中的总重复数?,python,pandas,for-loop,Python,Pandas,For Loop,数据帧示例: 我试图找出一个数据帧的每列中存在多少重复记录。我想我可以简单地在下面这样的for循环中使用df.[column name].duplicated().sum()代码,但是duplicated()的语法错误无效 我的具体目标:有人能告诉我正确的语法是什么吗?但是,如果我这样做的方法完全不正确,那么除了for循环之外,还有什么方法可以完成同样的事情呢 我希望得到以下格式的输出: 列名称:列中重复的总数您可以按所有列分组并调用大小索引指示重复值: df.groupby(df.column
df.[column name].duplicated().sum()
代码,但是duplicated()的语法错误无效
我的具体目标:有人能告诉我正确的语法是什么吗?但是,如果我这样做的方法完全不正确,那么除了for循环之外,还有什么方法可以完成同样的事情呢
我希望得到以下格式的输出:
列名称:列中重复的总数您可以按所有列分组并调用大小索引指示重复值:
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()
dups
现在是:
>>> dupes
{'Car': 4}
只需将该逻辑应用于完整的数据帧。另一个简单的解决方案将基于值计数来消除for循环。i、 e
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}
您可以首先对所有列使用apply
,然后将唯一(1
)值替换为0
和sum
:
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}
这对我有用 你所说的“每列重复记录”是什么意思?似乎你只是在询问给定列中每个值在该列中出现的次数。a列B列C列马自达索尼戴尔马自达苹果惠普丰田索尼东芝a列有2个重复项,B列有2个副本,C列有0个副本。请在问题中添加并格式化您的数据,而不是在注释中。输入后意识到。试图弄清楚这个网站是如何工作的。谢谢你的帮助。欢迎来到StackOverflow!如果你发布一个帖子,你会得到更好更快的帮助。特别地,考虑包括示例代码的数据,它代表了代码> DF,以及预期的输出。谢谢你的帮助。我试着从Excel复制/粘贴数据,它看起来和我的评论一模一样。之后,只需突出显示文本并点击
Ctrl
+K
,将其格式化为类似于代码的格式。有关更多详细信息,请参阅。欢迎访问该站点。删除redunant函数几乎是类似的。
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}
for column in df.columns:
duplicate_column = df[column].duplicated().sum()
print(column,': ', duplicate_column)