我有以下pandas数据帧:
colA colB
idcode
3223 s1 13
3223 s2 18
211 s1 24
211 s2 43
211 s3 198
其中colA
和colB
是列,idcode
是行的索引。
我希望输出df如下:
s1 s2 s3
idcode
3223 13 18 nan(or 0 but I'd prefer nan)
211 24 43 198
我该怎么做?
答案 0 :(得分:2)
使用set_index
和unstack
df.set_index('colA', append=True).colB.unstack()
colA s1 s2 s3
idcode
211 24.0 43.0 198.0
3223 13.0 18.0 NaN
删除colA
对象上的columns
标签。
df.set_index('colA', append=True).colB.unstack().rename_axis(None, 1)
s1 s2 s3
idcode
211 24.0 43.0 198.0
3223 13.0 18.0 NaN
如果idcode
/ colA
对不唯一会怎样?
然后我们必须聚合。
pandas
0.20
groupby
# This could be any thing
# that aggregates, mean, sum, etc.
# /---\
df.groupby(['idcode', 'colA']).colB.first().unstack()
colA s1 s2 s3
idcode
211 24.0 43.0 198.0
3223 13.0 18.0 NaN
pivot_table
df.pivot_table('colB', index='idcode', columns='colA', aggfunc='first')
colA s1 s2 s3
idcode
211 24.0 43.0 198.0
3223 13.0 18.0 NaN
答案 1 :(得分:2)
以下是使用pivot()
的另一种方式:
df.pivot(columns='colA', values='colB')
colA s1 s2 s3
idcode
211 24.0 43.0 198.0
3223 13.0 18.0 NaN