使用pandas对具有条件的重复行求和

2024-09-26 18:14:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  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;销售列中的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

Tags: 数据namefalsedfassale条件pd
2条回答

只能尝试对每个组的^{}值求和:

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

您可以先按Namerent分组,然后按Name分组:

df2 = df.groupby(['Name', 'rent'], as_index=False).sum().groupby('Name', as_index=False).sum()

相关问题 更多 >

    热门问题