python - Pandas 数据帧 : groupby then transpose

标签 python pandas

我有这个数据帧:

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/

相关文章:

python - 如何填充 pandas 中缺失的 GPS 数据?

python-3.x - 将 float64 列转换为 int64 列

python - 在python中将一些数组合并为单个数组/列表

python - pyinstaller导入错误: No module named pkg_resources

python - 为什么 Windows 上的 Tkinter 渲染质量要差得多?

python - pandas groupby 并用另一列的第一个值减去一列的最后一个值

python - 基于针对另一列的引用表更新 Pandas Dataframe 列的问题

python - 按名称和来源重新采样 pandas 数据框

python - 如何使用 PyQt 或 PySide 在系统托盘中显示一些文本而不是图标?

python - 在python中的openCV中绘制一个旋转框