我有这个数据框:
b_id conta valor
302 12.3 123
303 12.3 323
302 11.4 674
...
我很难让它看起来像这样:
b_id 12.3 11.4 ...
302 123 674
303 323 NaN
...
已经尝试了不同的合并,concats和join,但我没有成功,似乎没有任何东西让它看起来像这样。 有人可以帮忙吗?
答案 0 :(得分:1)
您需要使用pivot
或set_index
+ unstack
进行重塑:
df = df.pivot(index='b_id', columns='conta', values='valor')
print (df)
conta 11.4 12.3
b_id
302 674.0 123.0
303 NaN 323.0
df = df.set_index(['b_id', 'conta'])['valor'].unstack()
print (df)
conta 11.4 12.3
b_id
302 674.0 123.0
303 NaN 323.0
如果列中的重复项创建了新的索引和列:
print (df)
b_id conta valor
0 302 12.3 123<-b_id=302, conta=12.3
1 302 12.3 100<-b_id=302, conta=12.3
2 303 12.3 323
3 302 11.4 674
...然后需要使用mean
,sum
等综合函数pivot_table
或使用groupby
+ aggregate function
+ unstack
:< / p>
df = df.pivot_table(index='b_id', columns='conta', values='valor', aggfunc='mean')
print (df)
conta 11.4 12.3
b_id
302 674.0 111.5
303 NaN 323.0
df = df.groupby(['b_id', 'conta'])['valor'].mean().unstack()
print (df)
conta 11.4 12.3
b_id
302 674.0 111.5
303 NaN 323.0