熊猫pivot_table和额外的索引级别

时间:2020-09-07 03:36:20

标签: python pandas dataframe transpose

首先,我是唯一对透视表创建额外级别的索引/列名称感到沮丧的人吗?我从来没有使用过数据透视表,除了平面数据框类型之外,还想要其他任何东西,但是每次使用它时,我都不得不重置索引,找出列名等。

这是一个例子,我有一个数据帧,看起来像这样:

geography variable_type t0 t1 t2 t3
geo1      var1          1  3  4  8
geo1      var2          8  9  3  1
geo2      var1          4  7  9  4
geo2      var2          1  8  3  5

我想要完成的是:

geography time var1 var2
geo1      0    1    8
geo1      1    3    9
geo1      2    4    3
geo1      3    8    1
geo2      0    4    1
geo2      1    7    8
geo2      2    9    3
geo2      3    4    5

到目前为止,我的代码:

pd.melt(df,id_vars=['geography','variable_type']).pivot_table(index=['geography','variable'],columns='variable_type')

这给了我一些东西,其中地理和变量看起来是索引,而列似乎是不同的变量,但它们似乎具有“值”的父级和“ variable_type”的名称。如果我这样添加一个reset_index():

pd.melt(df,id_vars=['geography','variable_type']).pivot_table(index=['geography','variable'],columns='variable_type').reset_index()

然后我得到的结果是,变量的名称仍为“ variable_type”,父级为“ value”,而索引已解析且为0-n。

所以我的问题是:

  1. 如何在此刻解决此问题?我想要一个看起来像csv或数据库表或任何其他普通数据框的平面数据框。
  2. 是否有另一种方法可以不使用pivot_table,或者不使用pivot_table而无需引入所有这些十亿年来我从未想要过的新索引级别/名称?

1 个答案:

答案 0 :(得分:1)

values添加pivot_table选项并链接rename_axis

df_final =  (pd.melt(df,id_vars=['geography','variable_type'])
               .pivot_table(index=['geography','variable'],columns='variable_type',values='value')
               .reset_index().rename_axis(None,axis=1))

Out[75]:
  geography variable  var1  var2
0      geo1       t0     1     8
1      geo1       t1     3     9
2      geo1       t2     4     3
3      geo1       t3     8     1
4      geo2       t0     4     1
5      geo2       t1     7     8
6      geo2       t2     9     3
7      geo2       t3     4     5