次のようなパンダのデータフレームがあるとします。
Category col1 col2 value
A a a 1
A a b 2
A b a 3
A b b 4
B a a 5
B a b 6
B b a 7
B b b 8
次に、データフレームを次の形式に変更します。
Category aa ab ba bb
A 1 2 3 4
B 5 6 7 8
私はいくつかのアプローチを試しましたが、うまくいきませんでした。これを実現する機能はありますか?
列を結合しますpivot
:
df['new'] = df['col1'] + df['col2']
df1 = df.pivot('Category','new','value')
print (df1)
new aa ab ba bb
Category
A 1 2 3 4
B 5 6 7 8
またはDataFrame.set_index
でSeries.unstack
:
df1 = df.set_index(['Category',df['col1'] + df['col2']])['value'].unstack()
print (df1)
aa ab ba bb
Category
A 1 2 3 4
B 5 6 7 8
インデックスの列が必要な場合は最後:
df1 = df1.rename_axis(None, axis=1).reset_index()
print (df1)
Category aa ab ba bb
0 A 1 2 3 4
1 B 5 6 7 8
可能であればエラー:
ValueError:インデックスに重複するエントリが含まれているため、形状を変更できません
print (df)
Category col1 col2 value
0 A a a 1
1 A a a 4
2 A a b 2
3 A b a 3
4 A b b 4
5 B a a 5
6 B a b 6
7 B b a 7
8 B b b 8
次にDataFrame.pivot_table
、集計関数が必要ですmean
。たとえば、デフォルト:
df['new'] = df['col1'] + df['col2']
df = df.pivot_table(index='Category',columns='new',values='value', aggfunc='mean')
print (df)
new aa ab ba bb
Category
A 2.5 2.0 3.0 4.0
B 5.0 6.0 7.0 8.0
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加