Pandas 熊猫-将键值列更改为键控行
我有需要收集总和和唯一计数统计数据的数据。数据的大致格式如下所示,以CSV形式出现:Pandas 熊猫-将键值列更改为键控行,pandas,Pandas,我有需要收集总和和唯一计数统计数据的数据。数据的大致格式如下所示,以CSV形式出现: Customer PartType 2011 2012 2013 A widget_b 1000 10000 20000 B widget_a 1 1000 5000 .... 我需要能够按客户(不含零件类型)汇总此表,并按年度对尺寸箱
Customer PartType 2011 2012 2013
A widget_b 1000 10000 20000
B widget_a 1 1000 5000
....
我需要能够按客户(不含零件类型)汇总此表,并按年度对尺寸箱中的客户进行合计和计数,以及按零件类型按年度对客户进行计数
有几个问题:
1) 是否有一种简单的方法可以使用pandas制作如下所示的数据帧:
Customer PartType Year value
A widget_b 2011 1000
A widget_b 2012 10000
....
我想我可以用pandas.pivot_表实现这一点,但是结果是一个奇怪的数据类型,groupby无法轻松处理
2) 是否有一种简单的方法可以在客户规模的存储桶中按年生成总和和计数?我在groupby方法中使用了pd.cut,它一次只生成一年的总和或计数,因此当您打印其他年份的结果时,它们完全相同。IIUC,您希望:
从稍微有趣的
数据帧开始:
>>> df
Customer PartType 2011 2012 2013
0 A widget_b 1000 10000 20000
1 B widget_a 1 1000 5000
2 B widget_c 111 222 333
我们使用pd.melt
解除框架的锁定:
>>> melted = pd.melt(df, ["Customer", "PartType"])
>>> melted
Customer PartType variable value
0 A widget_b 2011 1000
1 B widget_a 2011 1
2 B widget_c 2011 111
3 A widget_b 2012 10000
4 B widget_a 2012 1000
5 B widget_c 2012 222
6 A widget_b 2013 20000
7 B widget_a 2013 5000
8 B widget_c 2013 333
但是,它有一个无聊的名称“variable”
,而且它的顺序不是我们想要的。这很容易修复:
>>> melted.rename(columns={"variable": "Year"}, inplace=True)
>>> melted = melted.sort("Customer").reset_index(drop=True)
>>> melted
Customer PartType Year value
0 A widget_b 2013 20000
1 A widget_b 2012 10000
2 A widget_b 2011 1000
3 B widget_a 2012 1000
4 B widget_c 2012 222
5 B widget_a 2013 5000
6 B widget_c 2013 333
7 B widget_a 2011 1
8 B widget_c 2011 111
我不确定我是否完全遵循了您想要的聚合,但您应该能够根据自己的喜好应用groupby
。例如:
>>> melted.groupby(["Customer", "Year"]).sum()
value
Customer Year
A 2011 1000
2012 10000
2013 20000
B 2011 112
2012 1222
2013 5333
>>> melted.groupby(["Customer", "Year"]).sum()
value
Customer Year
A 2011 1000
2012 10000
2013 20000
B 2011 112
2012 1222
2013 5333