python - 我想更改 pandas 中 DataFrame 的格式。我怎样才能做到这一点?

标签 python pandas group-by pivot-table

我当前的数据框如下所示:

In [40]: result
Out[40]: 
  monthyear Facility       Date        Yield  Planned
0    Dec 15     CCM2 2015-12-01  2550.000000      0.0
1    Feb 16     CCM2 2016-02-01  4250.000000      0.0
2    Jan 16     CCM1 2016-01-01  1540.000000      0.0
3    Jan 16     CCM2 2016-01-01  6800.000000      0.0
4    Nov 15     CCM1 2015-11-01   921.458157    880.0
5    Nov 15     CCM2 2015-11-01  1750.310038   3000.0
6    Sep 15     CCM2 2015-09-01  5191.197065   8000.0

我需要将其格式更改为以下内容:

         monthyear       Date         CCM1         CCM2      Planned
0           Dec 15 2015-12-01     0.000000  2550.000000          0.0
1           Feb 16 2016-02-01     0.000000  4250.000000          0.0
2           Jan 16 2016-01-01  1540.000000  6800.000000          0.0
3           Nov 15 2015-11-01   921.458157  1750.310038       3880.0
4           Sep 15 2015-09-01     0.000000  5191.197065       8000.0

我该怎么做?提前致谢。

最佳答案

使用pivot_table然后 groupbyindex 聚合 sum :

df1 = (df.pivot_table(index=['monthyear','Date','Planned'], 
                      columns='Facility', 
                      values='Yield',
                      fill_value=0).reset_index(level=2))
print (df1)

Facility              Planned         CCM1         CCM2
monthyear Date                                         
Dec 15    2015-12-01      0.0     0.000000  2550.000000
Feb 16    2016-02-01      0.0     0.000000  4250.000000
Jan 16    2016-01-01      0.0  1540.000000  6800.000000
Nov 15    2015-11-01    880.0   921.458157     0.000000
          2015-11-01   3000.0     0.000000  1750.310038
Sep 15    2015-09-01   8000.0     0.000000  5191.197065

print (df1.groupby(level=[0,1]).sum())

Facility              Planned         CCM1         CCM2
monthyear Date                                         
Dec 15    2015-12-01      0.0     0.000000  2550.000000
Feb 16    2016-02-01      0.0     0.000000  4250.000000
Jan 16    2016-01-01      0.0  1540.000000  6800.000000
Nov 15    2015-11-01   3880.0   921.458157  1750.310038
Sep 15    2015-09-01   8000.0     0.000000  5191.197065

上次使用 rename_axis (pandas 0.18.0 中的新功能):

print (df1.groupby(level=[0,1]).sum().reset_index().rename_axis(None, axis=1))
  monthyear        Date  Planned         CCM1         CCM2
0    Dec 15  2015-12-01      0.0     0.000000  2550.000000
1    Feb 16  2016-02-01      0.0     0.000000  4250.000000
2    Jan 16  2016-01-01      0.0  1540.000000  6800.000000
3    Nov 15  2015-11-01   3880.0   921.458157  1750.310038
4    Sep 15  2015-09-01   8000.0     0.000000  5191.197065

关于python - 我想更改 pandas 中 DataFrame 的格式。我怎样才能做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37894809/

相关文章:

python - 在 Numpy 数组中提取高于特定阈值的连续值

postgresql - 如何在 postgres 的组中使用多个过滤器?

python - 使用自定义用户模型的 Django 用户注册不起作用

python - Mac 上的 VTK python 无法捕获键盘事件

python - Pandas 纬度经度分箱至 100x100 分箱

sql - 检查每组所有行的两列是否相等

mysql - 选择其中一列的值不同的 3 个最新记录

python - 类型错误 : function missing 1 required positional argument

python:将字典序列化为简单的html输出

sql - 计算 pandas 数据框中的不同值