在 Pandas 中按多个条件对 DataFrame 进行排序

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

我正在努力解决一种我无法在 Python 中实现的特定类型。

这是一个示例数据框

import pandas as pd

data = {
    'product': ['A', 'A', 'A', 'B', 'B', 'B'],
    'quantity': [0, 1, 2, 0, 1, 2],
    'cost': [0, 5, 3, 2, 4, 4]
}

df = pd.DataFrame(data)

我希望数据框“尽可能”按成本 ASC 排序,但数量应严格按产品 ASC 排序。

所以输出是。

产品 数量 成本
A 0 0
B 0 2
B 1 4
B 2 4
A 1 5
A 2 3

在这里,我们看到成本并没有严格按照 ASC 排序(参见第 5 行)。 但这是对数据集进行排序的唯一方法,尊重产品内的数量顺序。

我尝试了多种方法,深入搜索论坛并询问ChatGPT,到目前为止没有成功。

import pandas as pd

# Exemple de DataFrame
data = {
    'product': ['A', 'A', 'A', 'B', 'B', 'B'],
    'quantity': [0, 1, 2, 0, 1, 2],
    'cost': [0, 5, 3, 2, 4, 6]
}
df = pd.DataFrame(data)

# Trier d'abord par 'produit' et 'quantité' croissante
df_sorted = df.sort_values(by=['product', 'cost'])

# Ensuite, trier par 'gain' décroissant avec un tri stable pour maintenir l'ordre précédent
df_sorted = df_sorted.sort_values(by='quantity', ascending=True, kind='mergesort')


print(df_sorted)

python pandas sorting group-by
1个回答
0
投票
import pandas as pd

# Data
data = {
    'product': ['A', 'A', 'A', 'B', 'B', 'B'],
    'quantity': [0, 1, 2, 0, 1, 2],
    'cost': [0, 5, 3, 2, 4, 6]
}

df = pd.DataFrame(data)

# Sort with mergesort and ascending
df_sorted = df.sort_values(by=['product', 'cost', 'quantity'], ascending=[True, True, True], kind='mergesort')

print(df_sorted)

输出:

  product  quantity  cost
0       A         0     0
2       A         2     3
1       A         1     5
3       B         0     2
4       B         1     4
5       B         2     6
© www.soinside.com 2019 - 2024. All rights reserved.