Python / Pandas - 转置部分数据帧和分组键

时间:2017-07-22 14:39:29

标签: python pandas dataframe

我有这个数据框:

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,但我没有成功,似乎没有任何东西让它看起来像这样。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您需要使用pivotset_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

...然后需要使用meansum等综合函数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