假设我有一个熊猫数据框,如下所示:
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
我尝试了几种方法,但是没有用。它是否存在实现此目的的功能?
答案 0 :(得分:1)
将列与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