我正在努力解决一种我无法在 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)
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