python - 查找重复的行,将某个列乘以重复的数量,删除重复的行
问题描述
我有一个大约 70000 行的 pandas 数据框,其中 4500 行是原始数据的副本。这些列是字符串列和数字列的混合。我感兴趣的专栏是value
专栏。我想查看整个数据框以找到完全相同的行,计算每行重复行的数量(包括原始行),并将value
该行中的行数乘以重复行数。
我不确定如何从一开始就解决这个问题,但我尝试使用 df[df.duplicated(keep = False)] 来获取df1
重复行(包括原始行)的数据框。我将一列 Trues 附加到df1
. 我尝试使用 .groupby 与列的组合来总结 True 的数量,但结果无法捕获真实的重复数(在这种情况下,我获得了大约 3600 个唯一的重复行)。
这是我的实际代码:
duplicate_bool = df.duplicated(keep = False)
df['duplicate_bool'] = duplicate_bool
df1= df[duplicate_bool]
f = {'duplicate_bool':'sum'}
df2= df1.groupby(['Date', 'Exporter', 'Buyer', \
'Commodity Description', 'Partner Code', \
'Quantity', 'Price per MT'], as_index = False).agg(f)
我的想法是获得一个没有重复的单独数据框df2
,我可以将内部列中的条目value
与存储在求和duplicate_bool
列中的数字相乘。df2
然后,在删除由 .duplicated 标识的所有重复项后,我只需附加到我的原始数据帧。
但是,如果我对所有列使用 groupby,我会得到一个空数据框。如果我不使用所有列,我不会得到真实的重复数量,我将无法以任何方式附加它。
我想我想要一个更好的方法来做到这一点,因为我让自己感到困惑。
解决方案
我认为这个问题只不过是弄清楚如何计算每个唯一行的出现次数。如果一行只出现一次,则此数字为一。如果它更频繁地发生,它将 > 1。然后您可以使用此计数来进行乘法、过滤等。
这个漂亮的单行(取自How to count duplicate rows in pandas dataframe?)创建了一个额外的列,其中包含每行的出现次数:
df = df.groupby(df.columns.tolist()).size().reset_index().rename(columns={0:'dup_count'})
.
然后计算每一行的真实值:
df['total_value'] = df['value'] * df['dup_count']
为了过滤,我们可以使用该dup_count
列来删除所有重复的行:
dff = df[df['dup_count'] == 1]
推荐阅读
- python-3.x - Odoo12 - 将上下文从模型传递到过滤器搜索视图
- c++ - 将向量的元素插入集合,同时打印集合元素得到编译问题c ++ 98
- javascript - 如何用更改 addEventListener 替换内容而不是添加
- node.js - 根据 id 和一个特定属性过滤 mongoose 中的文档
- python - 是否可以在 html 的标签中插入变量?例如:
- flutter - 无法预编译 build_runner:build_runner:
- java - 如何验证来自同一父级的另一个 Maven 模块的 JSON
- power-automate - 获取项目或文件的更改(仅限属性)
- reactjs - 如何使用 react 和 typescript 使用样式化组件?
- r - R中的plot() - 如何在两条垂直线之间遮蔽区域?