Pandas DataFrame:groupby然后转置

时间:2017-12-19 16:52:03

标签: python pandas

我有这个DataFrame:

df = pd.DataFrame({'1-sensor':['608', '608', '2158', '2158'],
          '2-day':['2017-12-11', '2017-12-12', '2017-12-11', '2017-12-12'],
          '3-voltage':[30, 31, 28, 29]})

df:

  1-sensor       2-day  3-voltage
0      608  2017-12-11         30
1      608  2017-12-12         31
2     2158  2017-12-11         28
3     2158  2017-12-12         29

我想让它看起来像这样:

pd.DataFrame({'1-sensor':['608', '2158'],
              '2017-12-11':[30, 28],
              '2017-12-12':[31, 29]})

df:

  1-sensor  2017-12-11  2017-12-12
0      608          30          31
1     2158          28          29

我尝试过将.groupby('sensor').unstack()组合在一起但不成功的不同解决方案。有什么好的建议吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

选项1
如果没有聚合,请使用pivot。这实际上更有效 -

df.pivot(index='1-sensor', columns='2-day', values='3-voltage')

2-day     2017-12-11  2017-12-12
1-sensor                        
2158              28          29
608               30          31

如果要执行任何汇总,请使用pivot_table并添加aggfunc=...


选项2
set_index + unstack -

的另一种解决方案
df.set_index(['1-sensor', '2-day']).unstack()

          3-voltage           
2-day    2017-12-11 2017-12-12
1-sensor                      
2158             28         29
608              30         31

如果需要汇总,则groupby + unstack 执行此操作。你这个关闭。

df.groupby(['1-sensor', '2-day'], sort=False).sum().unstack()  

          3-voltage           
2-day    2017-12-11 2017-12-12
1-sensor                      
608              30         31
2158             28         29

sum替换为您要使用的aggfunction,如果则需要使用。

答案 1 :(得分:1)

您也可以使用char*

执行此操作
void*