假设我的数据框像:
A B Date
[1,3,2] ['a','b','c'] date1
我想对这两列进行排序,但要相互参考。像这样的输出应该是:
A B Date
[1,2,3] ['a','c','b'] date1
现在,如果只有两个列表,我将对zip method进行排序。
但是由于这些是数据帧的列。我不确定如何使用apply方法对它们进行相互引用排序。
我的数据框作为整体在第三列(日期)的基础上进行排序。现在,对于每个这样的日期,其他两列都有列表,每列都有相同数量的值。我想基于彼此对这些列表进行排序
答案 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_values
和sort_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