将复合值转换为Pandas数据框中的列

时间:2019-04-14 07:07:39

标签: python pandas dataframe

假设我有一个熊猫数据框,如下所示:

Category    col1    col2    value
  A          a        a        1
  A          a        b        2
  A          b        a        3
  A          b        b        4
  B          a        a        5
  B          a        b        6
  B          b        a        7
  B          b        b        8          

现在我想将数据框更改为以下格式:

Category    aa    ab    ba    bb  
A            1     2     3     4
B            5     6     7     8

我尝试了几种方法,但是没有用。它是否存在实现此目的的功能?

1 个答案:

答案 0 :(得分:1)

将列与pivot一起加入:

df['new'] = df['col1'] + df['col2']
df1 = df.pivot('Category','new','value')
print (df1)
new       aa  ab  ba  bb
Category                
A          1   2   3   4
B          5   6   7   8

或将DataFrame.set_indexSeries.unstack

df1 = df.set_index(['Category',df['col1'] + df['col2']])['value'].unstack()
print (df1)
          aa  ab  ba  bb
Category                
A          1   2   3   4
B          5   6   7   8

如果需要索引的最后一列:

df1 = df1.rename_axis(None, axis=1).reset_index()
print (df1)
  Category  aa  ab  ba  bb
0        A   1   2   3   4
1        B   5   6   7   8

如果可能的错误:

  

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

print (df)
  Category col1 col2  value
0        A    a    a      1
1        A    a    a      4
2        A    a    b      2
3        A    b    a      3
4        A    b    b      4
5        B    a    a      5
6        B    a    b      6
7        B    b    a      7
8        B    b    b      8

然后需要具有聚合功能的DataFrame.pivot_table,例如默认mean

df['new'] = df['col1'] + df['col2']
df = df.pivot_table(index='Category',columns='new',values='value', aggfunc='mean')
print (df)
new        aa   ab   ba   bb
Category                    
A         2.5  2.0  3.0  4.0
B         5.0  6.0  7.0  8.0