我有一个从数据透视表创建的数据框,如下所示:
mykey | values1 | values2 | values3 |
---|---|---|---|
1 | [1,2,0] | [2,3,5] | [2,3,4] |
3 | [2,1] | [3,1] | [2,1] |
我想按 values1 按升序对数据框中的列表进行排序,并将该排序反映在 values2 和 values3 的排序中,如下所示:
mykey | values1 | values2 | values3 |
---|---|---|---|
1 | [0,1,2] | [5,2,3] | [4,2,3] |
3 | [1,2] | [1,3] | [1,2] |
现在,我在创建数据透视表之前对数组的输入值进行了排序,这似乎有效,但我认为可能有一种方法可以在如上所述创建数据透视表后对其进行排序。
答案 0 :(得分:0)
您可以使用 df.apply(pd.Series.explode)
同时将所有列分解为更长的数据帧,以准备排序。然后,.groupby
回到列表中,现在按所需顺序:
import pandas as pd
df = pd.DataFrame({'mykey' : [1, 3],
'values1' : [[1,2,0], [2,1]],
'values2' : [[2,3,5], [3,1]],
'values3' : [[2,3,4], [2,1]]})
df = (df.apply(pd.Series.explode)
.reset_index()
.sort_values(['mykey', 'values1'])
.drop('index', axis=1)
.groupby('mykey') # Passing 'sort=False' could have a minor performance boost even though already sorted.
.agg(list)
.reset_index())
df
Out[1]:
mykey values1 values2 values3
0 1 [0, 1, 2] [5, 2, 3] [4, 2, 3]
1 3 [1, 2] [1, 3] [1, 2]