首页 > 解决方案 > 大熊猫中水平分组数据

问题描述

我有一个数据集,我在上面应用了groupby这样的:

dc = d.groupby(['Kit Status','kit_type'])['transaction_no'].count()

上面的输出是这样的:

Kit Status  kit_type
Onsite      Crate        84
            FLC          70
            PP Box       91
Return      Crate        49
            FLC          96
            PP Box      141
Name: transaction_no, dtype: int64

如何从上述占用的数据创建一个水平而不是垂直的新数据框

预期输出:

Product    Allotment    Onsite    Return
Crate      133          84         49
FLC        166          70         96
PP Box     232          91         141   

Allotment的总和在哪里onsiteReturn

标签: pythonpandas

解决方案


如果 use countis 用于从列transaction_no中排除缺失值的计数值。

Series.unstack第一级使用MultiIndex

dc = (d.groupby(['Kit Status','kit_type'])['transaction_no']
       .count()
       .rename_axis([None,'Product'])
       .unstack(0)
       .reset_index())
       

如果要计算所有值包括缺失值(如果存在):

dc = (pd.crosstab(d['kit_type'], d['Kit Status'])
        .rename_axis(index='Product', columns=None)
        .reset_index())

最后对于列的第一个位置的新总和列使用DataFrame.insert

dc.insert(0, 'Allotment', dc.sum(axis=1))
print (dc)

推荐阅读