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