如何根据相似的值将一列拆分为多个列

2024-09-29 07:35:49 发布

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

在这个数据帧(一个更大的数据帧的一部分),我想把蓝色和红色分开,这样它们就在两个不同的列上。(每个人只有两种颜色。)

        Person        Buckets_used
0       Jerry_blue    180 
1       Jerry_red     20
2       Tomba_blue    30
3       Tomba_red     600

我想创建下面的数据帧,但我不确定如何创建。这里应该使用正则表达式还是有更有效的方法?在

^{pr2}$

当我试图按照@Wen提出的以下解决方案时:

^{3}$

我在不正确的列中得到一些值。在

        Person        Buckets_used   Person      Buckets_used
0       Jerry_blue    180            Jerry_red   20      
1       Tomba_red     600            Tomba_blue  30

有没有办法解决这个问题,让所有的红军都在一个纵队下面,而蓝队在另一个纵队下面?


Tags: 数据方法颜色blueredusedperson蓝色
1条回答
网友
1楼 · 发布于 2024-09-29 07:35:49

我们需要使用str.split来创建新的para键

df['Key']=df.Person.str.split('_',expand=True)[0]
df
Out[37]: 
       Person  Buckets_used    Key
0  Jerry_blue           180  Jerry
1   Jerry_red            20  Jerry
2  Tomba_blue            30  Tomba
3   Tomba_red           600  Tomba

然后我们groupby

^{pr2}$

然后我们将列命名为

df.columns=['Person','Buckets_used']*int(df.shape[1]/2)
df
Out[53]: 
           Person Buckets_used     Person Buckets_used
Key                                                   
Jerry  Jerry_blue          180  Jerry_red           20
Tomba  Tomba_blue           30  Tomba_red          600

更新

df['Key']=df.Person.str.split('_',expand=True)[1]

df['Key1']=df.groupby('Key').cumcount()

df.set_index(['Key1','Key']).unstack()
Out[400]: 
          Person            Buckets_used     
Key         blue        red         blue  red
Key1                                         
0     Jerry_blue  Jerry_red          180   20
1     Tomba_blue  Tomba_red           30  600

相关问题 更多 >