Pandas Pivot有额外的专栏

时间:2017-02-21 03:04:02

标签: python pandas

我有一个简单的问题,关于如何使用额外的列来解决Pandas Dataframe的额外问题。

数据集如下所示:

X = pd.DataFrame({'country':['Peru','Peru','Japan','Japan'],'method':['m1','m2','m1','m2'], 'value':[1,2,3,4]})

Country   |   Method    |   Value
Peru      |   m1        |   1
Peru      |   m2        |   2
Japan     |   m1        |   3
Japan     |   m2        |   4

所有“国家”都拥有所有“方法”的价值 我想将每个国家/地区的数据框作为一个列进行调整,但我需要继续使用该方法:

Peru |  Japan | Method
1    |  3     | m1
2    |  4     | m4

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您需要将.pivot应用于X后跟.reset_index

我还删除了清洁输出列的名称。

df = X.pivot(index='method',columns='country',values='value').reset_index() 
df.columns.name = ''
print(df)

输出:

  method  Japan  Peru
0     m1      3     1
1     m2      4     2

答案 1 :(得分:0)

set_indexunstack的解决方案:

print (X.set_index(['method','country'])['value']
        .unstack(fill_value=0)
        .rename_axis(None, axis=1)
        .reset_index())

  method  Japan  Peru
0     m1      3     1
1     m2      4     2

但是如果得到错误(因为对methodcountry列中有重复项):

  

ValueError:索引包含重复的条目,无法重塑

具有groupby的解决方案和一些汇总函数,例如meansum,...)

X = pd.DataFrame({'country':['Peru','Peru','Peru','Japan'],
                  'method':['m1','m2','m1','m2'], 
                  'value':[1,2,3,4]})
print (X)
  country method  value
0    Peru     m1      1
1    Peru     m2      2
2    Peru     m1      3 <-duplicates Peru, m1
3   Japan     m2      4

print (X.groupby(['method','country'])['value'].mean()
        .unstack(fill_value=0)
        .rename_axis(None, axis=1)
        .reset_index())

  method  Japan  Peru
0     m1      0     2
1     m2      4     2

pivot_table默认aggfunc=np.mean

print (X.pivot_table(index='method', 
                     columns='country', 
                     values='value', 
                     fill_value=0, 
                     aggfunc=np.mean).
                     rename_axis(None, axis=1).
                     reset_index())

  method  Japan  Peru
0     m1      0     2
1     m2      4     2