Python 如何基于另一列的值拆分多个列

Python 如何基于另一列的值拆分多个列,python,pandas,Python,Pandas,下面是我的数据框的外观 id name val weight 1 x 10 0.3 1 y 5 0.1 1 z 6 -0.7 1 q 7 -0.3 2 t 3 0.5 2 m 2 0.1 2 s 8 -0.8 2 b 9 -0.2 下面是我想要的样子: id name_pos val_pos weight_pos name_neg val_neg weight_neg 1 x 10

下面是我的数据框的外观

id name val weight
1  x    10  0.3
1  y    5   0.1
1  z    6   -0.7
1  q    7   -0.3
2  t    3   0.5
2  m    2   0.1
2  s    8   -0.8
2  b    9   -0.2
下面是我想要的样子:

id name_pos val_pos weight_pos name_neg val_neg weight_neg
1  x        10      0.3        z        6       -0.7
1  y        5       0.1        q        7       -0.3
2  t        3       0.5        s        8       -0.8
2  m        2       0.1        b        9       -0.2
我想不出一个完美的解决方案来完成这个任务。我唯一的想法就是暴力手段


任何帮助都将不胜感激

这里有一个有效的解决方案:

df.set_index(['id'], inplace = True)

pd.concat((df[df.weight.gt(0)].add_suffix('_pos'),
           df[df.weight.lt(0)].add_suffix('_neg')),
          axis=1)

每个id是否正好有4行?如果没有,会发生什么?是的,它们将始终有一组行。这是否回答了您的问题?