python - 大熊猫中水平分组数据
问题描述
我有一个数据集,我在上面应用了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
的总和在哪里onsite
Return
解决方案
如果 use count
is 用于从列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)