pandas 如何按列“A”对值进行排序,在并列的情况下保留第二列“B”的顺序?

tvz2xvvm  于 2023-04-28  发布在  其他
关注(0)|答案(1)|浏览(88)

我有一个 Dataframe df,列为-A [timeseries],B [String]。
我想按升序对列A的 Dataframe 进行排序(最早的日期在前);并且如果我们在B的两个值之间具有针对特定日期的平局,则B中的值的顺序应当基于它们在列B中的原始顺序。例如,对于日期01/01/2022,在B中存在两个值-XYZABC。然后,在排序的 Dataframe 中,对于01/01/2022,第一个值应该是XYZ,然后是ABC
我试过什么?
我尝试了几种方法来让它工作,最接近我想出的是以下-

import pandas as pd

df = pd.DataFrame({'A': ['2022-01-01', '2022-01-01', '2022-01-02', '2022-01-03'], 'B': ['lul', 'foo', 'baz', 'qux'], 'X': [1, 1, 2, 2]})

df = df.sort_values(by = ['A','B'], key=lambda x: pd.factorize(x)[0])

display(df)

这似乎对我的例子起作用,然而,当我在我真实的的 Dataframe 上尝试时,我看到日期的顺序不正确,即升序。
谢谢你的帮助

p1tboqfb

p1tboqfb1#

通过在sort_values中使用kind='stable'(或kind='mergesort')来使用稳定的排序方法:

out = df.sort_values(by='A', kind='stable')

输出:

A    B  X
0  2022-01-01  lul  1
1  2022-01-01  foo  1
2  2022-01-02  baz  2
3  2022-01-03  qux  2

相关问题