首先,我是唯一对透视表创建额外级别的索引/列名称感到沮丧的人吗?我从来没有使用过数据透视表,除了平面数据框类型之外,还想要其他任何东西,但是每次使用它时,我都不得不重置索引,找出列名等。
这是一个例子,我有一个数据帧,看起来像这样:
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。
所以我的问题是:
答案 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