Python 使用熊猫旋转多个列

Python 使用熊猫旋转多个列,python,pandas,Python,Pandas,我这里有一个数据框 Row dist1 dist2 dist3 variable value Smallest Group 0 0 40 101 dist2 40 Smallest SmallestGroup 1 0 40 101 dist3 101 SecondSmallest SecondSmallestGroup 2 1 30 100 dist2 30 Small

我这里有一个数据框

    Row dist1   dist2   dist3   variable    value   Smallest    Group   
0   0       40  101 dist2   40  Smallest    SmallestGroup   
1   0       40  101 dist3   101 SecondSmallest  SecondSmallestGroup 
2   1       30  100 dist2   30  Smallest    SmallestGroup   
3   1       30  100 dist3   100 SecondSmallest  SecondSmallestGroup 
4   2   30  20  98  dist2   20  Smallest    SmallestGroup   
5   2   30  20  98  dist1   30  SecondSmallest  SecondSmallestGroup 
6   3   20  15  72  dist2   15  Smallest    SmallestGroup   
7   3   20  15  72  dist1   20  SecondSmallest  SecondSmallestGroup 
8   4   15  16  11  dist3   11  Smallest    SmallestGroup   
9   4   15  16  11  dist1   15  SecondSmallest  SecondSmallestGroup 
我希望以数据为轴心,这样我就有了四个新列:
minimable
secondminimable
(其中包含
value
列中的值)和
SmallestGroup
SecondSmallestGroup
(其中包含
变量
列中的值)

我期望的输出如下:

Row dist1   dist2   dist3   Smallest    SecondSmallest  SmallestGroup   SecondSmallestGroup
0   NaN      40      101    40                101            dist2         dist3
1   NaN      30      100    30                100            dist2         dist3

我确信我可以通过pivot实现这一点,但我不确定如何构造命令。

因为,我不认为原始数据指定“组”和“变量”必须关联在一起,“最小”和“值”,然后我们必须执行这两个步骤并连接起来

让我们试试这个:

(pd.concat([df.set_index(['Row','dist1','dist2','dist3','Group'])['variable'].unstack(),
            df.set_index(['Row','dist1','dist2','dist3','Smallest'])['value'].unstack()],
           axis=1)
   .reset_index())
输出:

   Row  dist1  dist2  dist3 SecondSmallestGroup SmallestGroup  SecondSmallest  Smallest
0    0    NaN     40    101               dist3         dist2             101        40
1    1    NaN     30    100               dist3         dist2             100        30
2    2   30.0     20     98               dist1         dist2              30        20
3    3   20.0     15     72               dist1         dist2              20        15
4    4   15.0     16     11               dist1         dist3              15        11

df[['Row','dist1','dist2','dist3']].groupby('Row').first().join(
pivot_表(值='value',索引='Row',列=['minimate'],aggfunc='first')).join(
pivot_表(值='variable',索引='Row',列=['Group'],aggfunc='first'))
输出:

   Row  dist1  dist2  dist3 SecondSmallestGroup SmallestGroup  SecondSmallest  Smallest
0    0    NaN     40    101               dist3         dist2             101        40
1    1    NaN     30    100               dist3         dist2             100        30
2    2   30.0     20     98               dist1         dist2              30        20
3    3   20.0     15     72               dist1         dist2              20        15
4    4   15.0     16     11               dist1         dist3              15        11
dist1 dist2 dist3 second最小SecondSmallest组\
一行
南40 101 101 40区0 3
南30 100 100 30区1
230.020983020区1
3 20.0 15 72 20 15区1
4 15.0 16 11 11区1
小集团
一行
0区2
1区2
2区2
3区2
4区3