英文:
How can I sort a dataframe on some column?
问题
我想按照以下顺序对数据进行排序:(9, 10, 11, 12, 1, 2, 3),你能帮我做到吗?
英文:
I have the following code:
import pandas as pd
DF = pd.DataFrame({
"item_id": [1, 2, 3, 4, 5, 6, 7, 8, 9],
"customer": ["CG", "CGD", "CC", "CZ", "JD", "KD", "MM", "MK", "JJ"],
"costs": [150, 12, 78, 56, 5, 6, 4, 68, 69],
"games": [["Minecraft", "Uno"], ["WOW", "Minecraft"], ["WOW", "Minecraft"], ["WOW", "Minecraft", "The last of us"], ["Monopoly"], ["Monopoly", "Uno"], ["WOW", "Monopoly"], ["Uno", "SkipBo"], ["Schach", "Uno"]],
"date": ["2022-01-18", "2022-03-12", "2022-02-26", "2021-11-12", "2021-10-09", "2021-11-26", "2021-10-18", "2021-12-22", "2021-09-06"]
})
DF["games"] = [i[-1:] for i in DF["games"]]
DF["Day"] = pd.to_datetime(DF["date"]).dt.day
DF["Month"] = pd.to_datetime(DF["date"]).dt.month
DF["Year"] = pd.to_datetime(DF["date"]).dt.year
DF #(look at pic_1)
newDF_month = DF.drop(columns=["item_id", "customer", "games", "date", "Day", "Year"])
newDF_month.groupby(["Month"]).sum()
But this presents the data ordered by month using the ordering (1,2,3,9,10,11,12):
month | costs
-------------
1 | 150
2 | 78
3 | 12
9 | 69
10 | 9
11 | 62
12 | 68
but I would like to have the ordering be (9, 10, 11, 12, 1, 2, 3) instead:
month | costs
-------------
9 | 69
10 | 9
11 | 62
12 | 68
1 | 150
2 | 78
3 | 12
How can I do that?
答案1
得分: 4
你可以对其移位后取模12来使用 sort_index
:
(newDF_month
.groupby("Month").sum()
.sort_index(key=lambda i: (i-9)%12)
)
输出:
costs
Month
9 69
10 9
11 62
12 68
1 150
2 78
3 12
英文:
You can sort_index
on its shifted value modulo 12:
(newDF_month
.groupby(["Month"]).sum()
.sort_index(key=lambda i: (i-9)%12)
)
Output:
costs
Month
9 69
10 9
11 62
12 68
1 150
2 78
3 12
答案2
得分: 1
另一个可能的解决方案:
新 = 新DF_月.groupby(["月"]).sum()
m = 新.index >= 9
pd.concat([新.loc[m, :], 新.loc[~m, :]])
输出:
费用
月
9 69
10 9
11 62
12 68
1 150
2 78
3 12
英文:
Another possible solution:
new = newDF_month.groupby(["Month"]).sum()
m = new.index >= 9
pd.concat([new.loc[m, :], new.loc[~m, :]])
Output:
costs
Month
9 69
10 9
11 62
12 68
1 150
2 78
3 12
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论