操纵pandas数据帧

时间:2017-07-28 14:49:58

标签: python pandas dataframe

我有以下pandas数据帧:

        colA   colB   
idcode
3223      s1   13
3223      s2   18
211       s1   24
211       s2   43
211       s3  198

其中colAcolB是列,idcode是行的索引。 我希望输出df如下:

        s1   s2  s3
idcode  
3223    13   18  nan(or 0 but I'd prefer nan)
211     24   43  198 

我该怎么做?

2 个答案:

答案 0 :(得分:2)

使用set_indexunstack

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