使用熊猫将重复行与条件相加
我有一个看起来像这样的数据框:
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
我想提出条件,如果我在列字段中有重复的行和重复的值=> 示例:
- 重复行 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
我试过这段代码,但它不像我想要的那样工作
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)
我得到了这个输出
Name rent sale
0 A 360 7
1 B 1 4
2 M 14 20
3 O 10 1
回答
可以尝试仅对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)
)
df2:
Name rent sale
0 A 180 7
1 B 1 4
2 M 14 20
3 O 10 1