按照某一列的分类值对多列进行分组,并计算各组的总和(Pandas)

huangapple go评论76阅读模式
英文:

Groupby several columns and take the sum based off of categorical values within a column (Pandas)

问题

我正在寻找根据某一列中的分类值对多列进行分组并求和的方法。

数据

姓名   大小    类型
AA    9385   FALSE
AA    9460   FALSE
AA    9572   TRUE
AA    9680   
BB    10     TRUE
BB    10     TRUE
BB    20     FALSE
BB    20     FALSE

期望的结果

姓名   大小    类型
AA    9572   TRUE
AA    18845  FALSE
AA    9680   
BB    20     TRUE
BB    40     FALSE
BB		 

正在执行的操作

df = df.groupby('name').agg({'size': 'sum', 'type': lambda x: x.value_counts().idxmax()})

然而,这似乎已经移除了空值。有任何建议吗?

英文:

I am looking to groupby several columns and take the sum based off of categorical values within a column.

Data

name	size	type
AA	    9385	FALSE
AA	    9460	FALSE
AA	    9572	TRUE
AA	    9680	
BB	    10   	TRUE
BB	    10  	TRUE
BB	    20  	FALSE
BB	    20  	FALSE

Desired

name	size	type
AA   	9572	TRUE
AA   	18845	FALSE
AA  	9680	
BB  	20  	TRUE
BB  	40  	FALSE
BB		 

Doing

df = df.groupby('name').agg({'size': 'sum', 'type': lambda x: x.value_counts().idxmax()})

However, this appears to have removed Null values. Any suggestion is appreciated.

答案1

得分: 1

使用dropna=False在groupby中:

df.groupby(['name', 'type'], dropna=False, as_index=False)['size'].sum()

输出:

      name   type   size
    0   AA  False  18845
    1   AA   True   9572
    2   AA    NaN   9680
    3   BB  False     40
    4   BB   True     20
英文:

Use dropna=False in groupby:

df.groupby(['name', 'type'], dropna=False, as_index=False)['size'].sum()

Output:

  name   type   size
0   AA  False  18845
1   AA   True   9572
2   AA    NaN   9680
3   BB  False     40
4   BB   True     20

huangapple
  • 本文由 发表于 2023年6月6日 07:01:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/76410488.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定