2017-07-28 29 views
0

データフレームを逆方向にピボットする方法を探しています。私の知る限りでは、pandasは、EAV dfを「通常の」ものに変換するピボットまたはピボットテーブルのメソッドを提供します。しかし、その逆を行う方法もありますか?データフレーム列を積み重ねる(パンダ)

ので、データフレームを与えられた:

$df userid A B C 0 1 1 0 1 1 3 1 2 1 5 0

私は(EAVモデル)に変換したいと思います:

$df E A V
0 A 1 0 B 1 0 C 0 1 A 1 1 B 3 1 C 1 2 A 1 2 B 5 2 C 0

そうする最も効率的な方法だろう何? useridを想定し

答えて

3

df.stackはそれを行うだろう、指標である:

In [133]: df.stack().reset_index().rename(columns={'userid' : 'E', 'level_1' : 'A', 0 : 'V'}) 
Out[133]: 
    E A V 
0 0 A 1 
1 0 B 1 
2 0 C 0 
3 1 A 1 
4 1 B 3 
5 1 C 1 
6 2 A 1 
7 2 B 5 
8 2 C 0 

useridがインデックスされていない場合、このようにそれを設定します。

df.set_index('userid', inplace=True) 
関連する問題