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