python - 如何根据相似值将一列拆分为多列

标签 python pandas matplotlib seaborn

在此数据框(更大的数据框的一部分)中,我想将蓝色与红色分开,以便它们位于两个不同的列上。 (每个人只有两种颜色。)

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

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

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

当我尝试执行@Wen 建议的以下解决方案时:

df=df.set_index('Key').groupby(level=0).apply(lambda x : np.concatenate(x.values.tolist())).apply(pd.Series)

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

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

有没有办法解决这个问题,让所有红色都在一列下,蓝色在另一列下?

最佳答案

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

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

df=df.set_index('Key').groupby(level=0).apply(lambda x : np.concatenate(x.values.tolist())).apply(pd.Series)
df
Out[47]: 
                0    1          2    3
Key                                   
Jerry  Jerry_blue  180  Jerry_red   20
Tomba  Tomba_blue   30  Tomba_red  600

然后我们设置列名称

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

关于python - 如何根据相似值将一列拆分为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48155217/

相关文章:

python - 如何使用python以相同的顺序再次合并两个分离的数据帧

python - PyInstaller 和 Pandas

python - 在matplotlib中获取颜色图的长度

python - 在 matplotlib 的条形图中设置不同的误差线颜色

python - 如何复制 Django 查询集

python - GridSearchCV 将为此运行多少种组合?

python - AWS Lambda 存储问题

python - for 循环在 Python 中生成/导出输出的时间太长

python - 为什么我的函数会在函数范围之外更改其参数?

python - 一个列表理解中的两个 for 循环分别