gpt4 book ai didi

python - 查找重复行,将某一列乘以重复行数,删除重复行

转载 作者:行者123 更新时间:2023-12-01 08:30:01 31 4
gpt4 key购买 nike

我有一个大约 70000 行的 pandas 数据框,其中 4500 行是原始数据的重复项。这些列是字符串列和数字列的混合。我感兴趣的专栏是value柱子。我想查看整个数据帧以查找完全相同的行,计算每行的重复行数(包括原始行),然后乘以 value该行中的重复项数。

我不太确定如何从一开始就解决这个问题,但我尝试使用 df[df.duplicated(keep = False)] 来获取数据帧 df1重复行数(包括原始行)。我在df1的末尾附加了一列Trues 。我尝试使用 .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删除 .duplicate 标识的所有重复项后到我的原始数据框。

但是,如果我对所有列使用 groupby,我会得到一个空数据框。如果我不使用所有列,我就无法获得重复项的真实数量,并且无法以任何方式附加它。

我想我想要一个更好的方法来做到这一点,因为我自己都感到困惑。

最佳答案

我认为这个问题只不过是弄清楚如何获取每个唯一行的出现次数。如果一行仅出现一次,则该数字为 1。如果出现的频率更高,则其值 > 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 - 查找重复行,将某一列乘以重复行数,删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53943248/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com