2017-02-07 5 views
3

pandasピボット操作後に複数レベルのカラムの名前を変更するにはどうすればよいですか?ここでpandasピボットテーブルリネームカラム

は、テストデータを生成するためのいくつかのコードです:

import pandas as pd 
df = pd.DataFrame({ 
    'c0': ['A','A','B','C'], 
    'c01': ['A','A1','B','C'], 
    'c02': ['b','b','d','c'], 
    'v1': [1, 3,4,5], 
    'v2': [1, 3,4,5]}) 

print(df) 

は、テストデータフレームを与える:

df2 = pd.pivot_table(df, index=["c0"], columns=["c01","c02"], values=["v1","v2"]) 
df2 = df2.reset_index() 

ピボットを適用

c0 c01 c02 v1 v2 
0 A A b 1 1 
1 A A1 b 3 3 
2 B B d 4 4 
3 C C c 5 5 

を与えるoutput1

レベルに参加して列の名前を変更するにはどうすればよいですか?最初の列は参加レベルの順序は、私には本当に重要ではありません "A_b_v1"

のようになります。例えばフォーマット <c01 value>_<c02 value>_<v1>

と 。

答えて

6

あなたはできる各要素はタプルを解凍して、必要な順序で戻ってそれらを結合、タプルで列をループ:

df2 = pd.pivot_table(df, index=["c0"], columns=["c01","c02"], values=["v1","v2"]) 

# Use the list comprehension to make a list of new column names and assign it back 
# to the DataFrame columns attribute. 
df2.columns = ["_".join((j,k,i)) for i,j,k in df2.columns] 
df2.reset_index() 

enter image description here

+2

おかげ '' '[「_」。 df2.columnsのcolのための(str(s).strip()のsのcolのsのための)結合する '' 'はレベルの数に関係なく、一般的な解決策として働いた – muon