以下のような2つの値でデータフレームをピボットした後:
import pandas as pd
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'bar'],
'B' : ['one', 'one', 'two', 'two',
'two', 'two', 'one', 'two'],
'C' : [56, 2, 3, 4, 5, 6, 0, 2],
'D' : [51, 2, 3, 4, 5, 6, 0, 2]})
pd.pivot_table(df, values=['C','D'],rows='B',cols='A').unstack().reset_index()
ピボットをアンスタックしてインデックスをリセットすると、2つの新しい列「level_0」と0が作成されます。Level_0には列名CとDが含まれ、0には値が含まれます。
level_0 A B 0
0 C bar one 2.0
1 C bar two 4.0
2 C foo one 28.0
3 C foo two 4.0
4 D bar one 2.0
5 D bar two 4.0
6 D foo one 25.5
7 D foo two 4.0
各値(C、D)が別々の列に表示されるようにフレームをアンスタックすることは可能ですか、それともこれを実現するためにフレームを分割して連結する必要がありますか?ありがとう。
目的の出力を表示するように編集:
A B C D
0 bar one 2 2
1 bar two 4 4
2 foo one 28 25.5
3 foo two 4 4
あなたがしたいstack
(そしてアンスタックしたくない):
In [70]: pd.pivot_table(df, values=['C','D'],rows='B',cols='A').stack()
Out[70]:
C D
B A
one bar 2 2.0
foo 28 25.5
two bar 4 4.0
foo 4 4.0
けれどもunstack
、あなたが使用します(のみ列軸での)インデックス軸に何のマルチインデックスがなかったので、「スタック」操作をしました。
しかし実際には、groupby-operationを使用してそこに到達することもできます(そして私はもっと論理的だと思います)。これは実際に行うことです(列CとDをAとBでグループ化します)。
In [72]: df.groupby(['A', 'B']).mean()
Out[72]:
C D
A B
bar one 2 2.0
two 4 4.0
foo one 28 25.5
two 4 4.0
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加