[英]pandas group by, aggregate using multiple agg functions on input columns
[英]Aggregate Multiple columns with different agg functions in Pandas using Crosstab
我有以下格式的 dataframe。 让我们称之为 df
标志 1 | 标志2 | 类型 | 计数 1 | count2 |
---|---|---|---|---|
一种 | X | 新的 | 10 | 2个 |
一种 | 是 | 老的 | 40 | 5个 |
一种 | X | 老的 | 50 | 6个 |
一种 | 是 | 新的 | 15 | 1个 |
我正在尝试获取以下格式。 (我无法合并 count1 和 count2 的相邻单元格)
计数 1 | count2 | ||||
---|---|---|---|---|---|
新的 | 老的 | 新的 | 老的 | ||
一种 | X | 10 | 50 | 2个 | 6个 |
一种 | 是 | 15 | 40 | 1个 | 5个 |
当我不得不只对一列 (count1) 进行聚合时,我尝试了以下操作,并且以下操作有效:
pd.crosstab([df.flag1,df.flag2], df.type, values=df.count1, aggfunc='sum')
但是由于我想要两列数据,count1 和 count2,我尝试了以下但没有成功
pd.crosstab([df.flag1,df.flag2], df.type, values=[df.count1,df.count2], aggfunc=['sum','sum']) #trial1
pd.crosstab([df.flag1,df.flag2], df.type, values=[df.count1,df.count2], aggfunc='sum') #trial2
他们都没有工作。
扩展:我应该能够在不同的列上使用不同的功能。 在 count1 上求和,在 count2 上求和,或者在 count1上求和,在 count2 上求和
我认为这里不可能使用crosstab
,替代方案是DataFrame.pivot_table
:
df = df.pivot_table(index=['flag1','flag2'],
columns='type',
aggfunc={'count1':'sum', 'count2':'nunique'})
print (df)
count1 count2
type new old new old
flag1 flag2
a x 10 50 1 1
y 15 40 1 1
聚合的另一种选择:
df = (df.groupby(['flag1','flag2','type'])
.agg({'count1':'sum', 'count2':'nunique'})
.unstack())
print (df)
count1 count2
type new old new old
flag1 flag2
a x 10 50 1 1
y 15 40 1 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.