将复合值转换为datafram中的列

2024-04-19 05:52:38 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我尝试了几种方法,但都不起作用。是否存在实现这一目标的功能


Tags: 数据方法功能目标abvalue格式col2
1条回答
网友
1楼 · 发布于 2024-04-19 05:52:38

将列与^{}连接在一起:

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

^{}^{}

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: Index contains duplicate entries, cannot reshape

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

然后需要带有聚合函数的^{},例如默认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

相关问题 更多 >