我有这个数据帧:
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()
但没有成功。有什么好的建议吗?谢谢!
最佳答案
选项 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,如果您需要使用一个。
关于python - Pandas 数据帧 : groupby then transpose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47891649/