在熊猫中对具有列表的列进行排序

时间:2020-05-30 23:11:27

标签: python pandas

假设我的数据框像:

   A             B           Date
[1,3,2]    ['a','b','c']     date1

我想对这两列进行排序,但要相互参考。像这样的输出应该是:

   A             B           Date
[1,2,3]    ['a','c','b']     date1

现在,如果只有两个列表,我将对zip method进行排序。

但是由于这些是数据帧的列。我不确定如何使用apply方法对它们进行相互引用排序。

我的数据框作为整体在第三列(日期)的基础上进行排序。现在,对于每个这样的日期,其他两列都有列表,每列都有相同数量的值。我想基于彼此对这些列表进行排序

2 个答案:

答案 0 :(得分:2)

如果所有单元格都具有相同数量的值,请尝试这种展平和分组方式:

df
           A          B
0  [1, 3, 2]  [a, b, c]
1  [4, 6, 5]  [d, f, e]  # added an extra row for demonstration

(df.apply(pd.Series.explode)
   .groupby(level=0)
   .apply(lambda x: x.sort_values('A'))
   .groupby(level=0)
   .agg(list))

           A          B
0  [1, 2, 3]  [a, c, b]
1  [4, 5, 6]  [d, e, f]

强制性免责声明:请不要使用熊猫在列表中存储列表。

答案 1 :(得分:1)

类似于cs95的解决方案,但使用sort_valuessort_index

# sample data
df = pd.DataFrame({
    'A':[[1,3,2],[2,1]],
    'B':[['a','b','c'],['c','d']],
    'Date':['date1','date2']
})

df[['A','B']] = (df[['A','B']].apply(pd.Series.explode)
    .sort_values('A',kind='mergesort')
    .sort_index(kind='merge_sort')
    .groupby(level=0).agg(list)
)

输出:

           A          B   Date
0  [1, 2, 3]  [a, c, b]  date1
1     [1, 2]     [d, c]  date2