用 pandas 删除/求和重复行

5 python dataframe pandas

我有这个数据框,如果我有重复的行,如果它们完全相同(梅赛德斯exp),我怎样才能做出条件,我只保留一个(不求和)或者如果有一个求和(起亚案例)租金/售价差异

Df 示例

  cars      rent  sale
  Kia       1     2
  Bmw       1     4
  Mercedes  2     1
  Ford      1     1
  Kia       4     5
  Mercedes  2     1
Run Code Online (Sandbox Code Playgroud)

我写这段代码:

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)
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

       cars  rent  sale
0       Bmw     1     4
1      Ford     1     1
2       Kia     5     7
3  Mercedes     4     2
Run Code Online (Sandbox Code Playgroud)

预期输出

        cars  rent  sale
0       Kia     5     7
1       Bmw     1     4
2  Mercedes     2     1
3      Ford     1     1
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 3

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

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
Run Code Online (Sandbox Code Playgroud)

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

df1 = (df.drop_duplicates(['cars','rent','sale'])
         .groupby('cars', sort=False, as_index=False)
         .sum())
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)