gpt4 book ai didi

python - groupby : Take the most frequent value but if its a blank, 的聚合函数采用第二个最频繁的值

转载 作者:行者123 更新时间:2023-12-01 07:35:45 24 4
gpt4 key购买 nike

编辑:澄清问题

我想通过“标识符”聚合一个名为 df 的 pd.DataFrame 并对“成本”列求和。对于类别列,我想应用一个可以大声说出的聚合函数,例如“聚合并取列中最常见的值(众数),但如果众数为空白,则取第二个最常见的列”。换句话说,我想要类别的众数(聚合后),但众数不能为空。

结果应该是 pd.DataFrame new_df

df
Identifier Cost Cost2 Category1 Category2 Category3
0 A 10 10 one aaa
1 A 20 10 blue aaa
2 B 10 20 two bbb
3 B 10 30 green bbb
4 B 30 40 bbb
5 C 20 50 three red ccc

--- 聚合过程 --->

new_df
Identifier Cost Cost2 Category1 Category2 Category3
0 A 30 20 one blue aaa
1 B 50 90 two green bbb
2 C 20 50 three red ccc

重现示例的代码:

import pandas as pd

data_df = {
'Identifier': ['A', 'A', 'B', 'B', 'B', 'C'],
'Cost': [10, 20, 10, 10, 30, 20],
'Cost2':[10,10,20,30,40,50],
'Category1' : ['one', '', 'two', '', '', 'three'],
'Category2' : ['', 'blue', '', 'green', '', 'red'],
'Category3' : ['aaa', 'aaa', 'bbb', 'bbb', 'bbb', 'ccc']
}

df = pd.DataFrame(data_df)


data_new_df = {
'Identifier': ['A', 'B', 'C'],
'Cost': [30, 50, 20],
'Cost2' : [20,90,50],
'Category1' : ['one', 'two', 'three'],
'Category2' : ['blue', 'green', 'red'],
'Category3' : ['aaa', 'bbb', 'ccc']
}

new_df = pd.DataFrame(data_new_df)

最佳答案

也许你可以尝试 groupbysum 如下:

new_df = df.groupby('Identifier').apply(sum).drop('Identifier', axis=1).reset_index()

结果:

  Identifier  Cost Category1 Category2
0 A 30 one blue
1 B 50 two green
2 C 20 three red

关于python - groupby : Take the most frequent value but if its a blank, 的聚合函数采用第二个最频繁的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56997408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com