【问题标题】:Remove/sum duplicate row with pandas用熊猫删除/求和重复行
【发布时间】:2021-09-05 19:30:00
【问题描述】:

我有这个数据框,如果我有一个重复的行,如果它们完全相同(梅赛德斯 exp)我只保留一个(不求和)或者求和(起亚案例)如果租金/销售价值存在差异

Df 示例

  cars      rent  sale
  Kia       1     2
  Bmw       1     4
  Mercedes  2     1
  Ford      1     1
  Kia       4     5
  Mercedes  2     1

我写了这段代码:

import pandas as pd 

df=pd.DataFrame({'cars':['Kia','Bmw','Mercedes','Ford','Kia','Mercedes'],
                'rent':[1,1,2,1,4,2],
                'sale':[2,4,1,1,5,1]})

df=df.groupby(['cars']).sum().reset_index()
print(df)

我得到了这个输出:

       cars  rent  sale
0       Bmw     1     4
1      Ford     1     1
2       Kia     5     7
3  Mercedes     4     2

预期输出

        cars  rent  sale
0       Kia     5     7
1       Bmw     1     4
2  Mercedes     2     1
3      Ford     1     1

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

在聚合 sum 之前使用 DataFrame.drop_duplicates - 这会在所有列中一起寻找重复项:

df1 = df.drop_duplicates().groupby('cars', sort=False, as_index=False).sum()
print(df1)
       cars  rent  sale
0       Kia     5     7
1       Bmw     1     4
2  Mercedes     2     1
3      Ford     1     1

如果需要指定检查重复的列:

df1 = (df.drop_duplicates(['cars','rent','sale'])
         .groupby('cars', sort=False, as_index=False)
         .sum())

但如果需要为每列单独删除重复项,请使用带有 np.uniquesum 的 lambda 函数:

df=pd.DataFrame({'cars':['Kia','Bmw','Mercedes','Ford','Kia','Mercedes'],
                'rent':[1,1,2,1,4,2],
                'sale':[2,4,1,1,5,5]})
print(df)
       cars  rent  sale
0       Kia     1     2
1       Bmw     1     4
2  Mercedes     2     1
3      Ford     1     1
4       Kia     4     5
5  Mercedes     2     5 <- changed 5

df2 = df.groupby('cars', sort=False, as_index=False).agg(lambda x: np.unique(x).sum())
print(df2)
       cars  rent  sale
0       Kia     5     7
1       Bmw     1     4
2  Mercedes     2     6
3      Ford     1     1

【讨论】:

    【解决方案2】:
    df['duplicated']=df.duplicated()  # create a column with the info of duplicating 
    row or not.
    df = df[~df['duplicated'].isin([True])] # delete duplicated row.
    df.drop('duplicated', inplace=True, axis=1) # delete the column that we added.
    df=df.groupby(['cars'], sort=False).sum().reset_index() # group the dataframe.
    

    你也可以这样做

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 2016-01-30
      • 2016-02-11
      • 2013-10-28
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      相关资源
      最近更新 更多