Python:按特定列排序并自动对其他列排序

问题描述 投票:0回答:1

我有这样的数据框切片,我想按人和购买日期对值进行排序,然后所有其他列都会自动升序排序。

df = pd.DataFrame({'person': [1, 1, 1, 2, 3, 3],
                   'brand': ['b', 'a', 'a', 'b', 'a', 'b'],
                   'product': ['A1', 'A1', 'A2', 'B1', 'C1', 'C2'],
                   'buydate': ['20220101', '20220101', '20220401', '20220601', '20220630', '20221201'],
                   'type': ['2', '1', '1', '1', '1', '2'],
                   'price': [50, 20, 200, 300, 20, 150],})

我期望:

品牌 产品 购买日期 类型 价格
0 1 a A1 20220101 1 20
1 1 b A1 20220101 2 50
2 1 a A2 20220401 1 200
3 2 b B1 20220601 1 300
4 3 a C1 20220630 1 20
5 3 b C2 20221201 2 150

我已经尝试过了

df = df.sort_values(['person', 'buydate'])

但我只得到:

品牌 产品 购买日期 类型 价格
0 1 b A1 20220101 2 50
1 1 a A1 20220101 1 20
2 1 a A2 20220401 1 200
3 2 b B1 20220601 1 300
4 3 a C1 20220630 1 20
5 3 b C2 20221201 2 150

我的数据集非常大并且包含很多列,因此如果有任何运行时间短的解决方案,我们将非常感激。虽然使用 lambda 需要太多时间,但也欢迎任何使用 lambda 的解决方案!

非常感谢!

python sorting group-by
1个回答
0
投票

您可以使用以下方法制作排序列表:

cols = ['person', 'brand']

out = df.sort_values(by=cols+list(df.columns.difference(cols)))

输出:

   person brand product   buydate type  price
1       1     a      A1  20220101    1     20
2       1     a      A2  20220401    1    200
0       1     b      A1  20220101    2     50
3       2     b      B1  20220601    1    300
4       3     a      C1  20220630    1     20
5       3     b      C2  20221201    2    150
© www.soinside.com 2019 - 2024. All rights reserved.