【发布时间】:2021-10-02 17:00:53
【问题描述】:
我使用 duplicated() 方法创建了一个仅包含重复行的数据框。 我的问题可能很简单。 我想在右侧添加一个计数列,并为每一行计算重复的 df 中有多少重复的外观。我曾想过为每列创建一个 groupby,但这并没有真正奏效。
类似df.groupby([*all columns*]).count()
这就是 df 的样子:
谢谢!
编辑:
问题由seabean回答并解决, 解决方案可以采用以下任何一种方法:
newdf = healthdf[healthdf.duplicated(keep = False)].copy()
df_count = newdf.value_counts(dropna =
False).reset_index(name='count')
df_out = newdf.merge(df_count, how='left')
df_out.drop_duplicates(keep = "first").sort_values("count", ascending
= False)
或
col = newdf.columns.to_list()
newdf.groupby(col,dropna=False).size().sort_values(ascending = False)
这是输出:
【问题讨论】:
-
只需阅读您对使用的最终代码和结果的编辑。我想我明白为什么你从 postgres 和 Pandas 得到两个计数差异的原因。是因为你的代码过滤了重复条目:
newdf = healthdf[healthdf.duplicated()].copy()你可以参考official doc of.duplicated()这个函数设置每组重复条目的第一行为假,其他为真。因此,您生成的newdf删除了每个重复集的第一行。所以,每个都得到-1。 -
要获得正确的计数,您可以使用
keep=False参数为.duplicated():newdf = healthdf[healthdf.duplicated(keep=False)].copy() -
现在有相同的计数吗?
-
太好了,我们终于解决了,尽管付出了一定的努力! :-)
-
嗨@Ori Hait 看到你有足够的声望来投票了。如果您发现我以前的帮助有帮助,您会考虑支持我的回答吗?您可以通过单击向上箭头 ▲ 来支持我的回答(请参阅 How to upvote on Stack Overflow?)。谢谢!
标签: python pandas data-analysis