繁体   English   中英

使用交叉表在 Pandas 中聚合具有不同聚合函数的多个列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM