使用列表列对 Pandas DataFrame 进行排序

时间:2021-01-15 22:46:04

标签: pandas list sorting pivot

我有一个从数据透视表创建的数据框,如下所示:

<头>
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]

现在,我在创建数据透视表之前对数组的输入值进行了排序,这似乎有效,但我认为可能有一种方法可以在如上所述创建数据透视表后对其进行排序。

1 个答案:

答案 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]
相关问题