我是python的新手,我正在嘗試解決以月 年格式對df進行排序的問題,我的原始資料看起來像這樣:(重新編輯:對不起,在檢查原始df后,月份列實際上就像: Aug, Jul, Jul, Jun. 不是數字格式)
ID year month ym
1 2018 Aug Aug 2018
2 2018 Jul Jul 2018
3 2019 Jul Jul 2019
4 2019 Jun Jun 2018
我想出來的方法是①按年份分成兩個df,然后②排序月份,最后③合并它們。但是有一些問題:
對于①,我不知道如何通過groupby進行拆分;
對于②,我嘗試這樣排序,它成功了,但看起來只是暫時排序:
sort_order=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
df.index = pd.CategoricalIndex(df['month'], categories=sort_order, ordered=True)
df.sort_index().reset_index(drop=True)
對于③,我擔心因為它是臨時排序的,所以當我嘗試將它們兩個合并時,它會是原始的。
我相信應該有更好的方法來解決這個問題。任何人都可以給出提示,或者指出我有什么問題嗎?謝謝!!
uj5u.com熱心網友回復:
根據您的示例(假設您的資料框名為 df),只需執行以下操作:
df = df.sort_values(["year", "month"])
這是結果:
year month ym
1 2018 7 Jul 2018
0 2018 8 Aug 2018
3 2019 6 Jun 2018
2 2019 7 Jul 2019
編輯請求:
因此,要將月份字串轉換為數字,請執行以下操作:創建一個字典:
months = {
"Jun": 6,
"Jul":7 ,
"Aug": 8,
....
}
依此類推,然后只需創建一個函式將月份轉換為整數,如下所示:
def transform(month):
return months[month]
然后將其應用于您的 df
df["month"] = df["month].apply(transform)
通過這種方式,您將在月份列中擁有一個帶有整數而不是字串的資料框
uj5u.com熱心網友回復:
可以用 做一個復合字串YYYY-mm,然后按照這個順序排序。
我們首先將你列ym在MMM YYYY由字串格式的日期時間格式pd.to_datetime,然后,使用dt.strftime格式化的日期字串YYYY-mm。這種以年份開頭,然后是月份的格式字串適合按時間順序排序。
df['YYYY-mm'] = pd.to_datetime(df['ym'], format='%b %Y').dt.strftime('%Y-%m')
df = df.sort_values('YYYY-mm')
結果:
print(df)
ID year month ym YYYY-mm
3 4 2019 Jun Jun 2018 2018-06
1 2 2018 Jul Jul 2018 2018-07
0 1 2018 Aug Aug 2018 2018-08
2 3 2019 Jul Jul 2019 2019-07
uj5u.com熱心網友回復:
如果你想和日期一起作業,我建議你和一個真正的人一起作業 DatetimeIndex
df = df.set_index(pd.to_datetime(df['ym']).rename('datetime'))
print(df)
# Output:
ID year month ym
datetime
2018-08-01 1 2018 8 Aug 2018
2018-07-01 2 2018 7 Jul 2018
2019-07-01 3 2019 7 Jul 2019
2018-06-01 4 2019 6 Jun 2018
現在您可以輕松地對資料框進行排序
>>> df.sort_index(ascending=False)
ID year month ym
datetime
2019-07-01 3 2019 7 Jul 2019
2018-08-01 1 2018 8 Aug 2018
2018-07-01 2 2018 7 Jul 2018
2018-06-01 4 2019 6 Jun 2018
過濾您的資料框:
>>> df[df.index > "2018-06"]
ID year month ym
datetime
2018-08-01 1 2018 8 Aug 2018
2018-07-01 2 2018 7 Jul 2018
2019-07-01 3 2019 7 Jul 2019
按年份分組:
>>> df.groupby(df.index.year)['ID'].sum()
datetime
2018 7
2019 3
Name: ID, dtype: int64
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/312305.html
上一篇:熊貓用數字字串對列進行排序
