大熊猫数据框在枢轴后重塑

Leo*_*Leo 4 python pivot-table dataframe pandas

枢轴代码:

result = pandas.pivot_table(result, values=['value'], index=['index'], columns=['columns'], fill_value=0)
Run Code Online (Sandbox Code Playgroud)

结果:

        value   value   value   
columns col1    col2    col3    
index
idx1    14      1       1
idx2    2       0       1
idx3    6       0       0  
Run Code Online (Sandbox Code Playgroud)

我试过:

result.columns = result.columns.get_level_values(1)
Run Code Online (Sandbox Code Playgroud)

然后我得到了这个:

columns col1    col2    col3
index
idx1    14      1       1
idx2    2       0       1
idx3    6       0       0  
Run Code Online (Sandbox Code Playgroud)

其实我想要的是这个:

index   col1    col2    col3
idx1    14      1       1
idx2    2       0       1
idx3    6       0       0
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这一目标?帮助真的很感激。先感谢您。

jez*_*ael 5

您需要index name通过rename_axis(新增pandas 0.18.0)删除:

df = df.rename_axis(None)
Run Code Online (Sandbox Code Playgroud)

如果还需要 remove columns name,请使用:

df = df.rename_axis(None, axis=1)
Run Code Online (Sandbox Code Playgroud)

如果使用旧版本的熊猫,请使用:

df.columns.name = None
df.index.name = None
Run Code Online (Sandbox Code Playgroud)

示例(如果[]从 中pivot_table删除,Multiindex则从列中删除):

print (result)
   index columns  value
0      1    Toys      5
1      2    Toys      6
2      2    Cars      7
3      1    Toys      2
4      1    Cars      9

print (pd.pivot_table(result, index='index',columns='columns',values='value', fill_value=0)
         .rename_axis(None)
         .rename_axis(None, axis=1))

   Cars  Toys
1     9   3.5
2     7   6.0         
Run Code Online (Sandbox Code Playgroud)

如果使用[],得到:

result = pd.pivot_table(result, values=['value'], index=['index'], columns=['columns'], fill_value=0)
            .rename_axis(None)
            .rename_axis((None,None), axis=1)
print (result)        
  value     
   Cars Toys
1     9  3.5
2     7  6.0     
Run Code Online (Sandbox Code Playgroud)