使用熊猫将重复行与条件相加

Pre*_*ige 2 python pandas

我有一个看起来像这样的数据框:

  Name  rent  sale
0    A   180     2
1    B     1     4
2    M    12     1
3    O    10     1
4    A   180     5
5    M     2    19
Run Code Online (Sandbox Code Playgroud)

我想提出条件,如果我在列字段中重复的行重复的值=> 示例:

  • 重复行 A在租金列中重复值 180 我只保留一个(不计算总和)
  • 或使总和=> 示例复制 A 行在销售列中具有不同的值 2 和 5,在租金和销售列中复制具有不同值的行 M

预期输出:

  Name  rent  sale
0    A   180     7
1    B     1     4
2    M    14     20
3    O    10     1
Run Code Online (Sandbox Code Playgroud)

我试过这段代码,但它不像我想要的那样工作

import pandas as pd 
    
df=pd.DataFrame({'Name':['A','B','M','O','A','M'],
                 'rent':[180,1,12,10,180,2],
                 'sale':[2,4,1,1,5,19]})
df2 = df.drop_duplicates().groupby('Name',sort=False,as_index=False).agg(Name=('Name','first'),
                                                                            rent=('rent', 'sum'),
                                                                            sale=('sale','sum'))
    
print(df2)    
Run Code Online (Sandbox Code Playgroud)

我得到了这个输出

  Name  rent  sale
0    A   360     7
1    B     1     4
2    M    14    20
3    O    10     1
Run Code Online (Sandbox Code Playgroud)

Hen*_*ker 5

可以尝试仅对unique每组的值求和:

def sum_unique(s):
    return s.unique().sum()


df2 = df.groupby('Name', sort=False, as_index=False).agg(
    Name=('Name', 'first'),
    rent=('rent', sum_unique),
    sale=('sale', sum_unique)
)
Run Code Online (Sandbox Code Playgroud)

df2

  Name  rent  sale
0    A   180     7
1    B     1     4
2    M    14    20
3    O    10     1
Run Code Online (Sandbox Code Playgroud)