我之前读过几篇关于该问题的类似文章,但没有一个解决方案对我有用。所以我得到了以下 csv:
Score date term
0 72 3 Feb · 1
1 47 1 Feb · 1
2 119 6 Feb · 1
8 101 7 hrs · 1
9 536 11 min · 1
10 53 2 hrs · 1
11 20 11 Feb · 3
3 15 1 hrs · 2
4 33 7 Feb · 1
5 153 4 Feb · 3
6 34 3 min · 2
7 26 3 Feb · 3
我想按日期对 csv 进行排序。最简单的方法是什么?
最佳答案
您可以创建 2 个辅助列 - 其中一个用于由 to_datetime
创建的日期时间第二个是 to_timedelta
创建的时间增量,只有必要的格式HH:MM:SS
,所以添加了Series.replace
通过正则表达式,所以最后可以按 DataFrame.sort_values
按 2 列排序:
df['date1'] = pd.to_datetime(df['date'], format='%d %b', errors='coerce')
times = df['date'].replace({'(\d+)\s+min': '00:\\1:00',
'\s+hrs': ':00:00'}, regex=True)
df['times'] = pd.to_timedelta(times, errors='coerce')
df = df.sort_values(['times','date1'])
print (df)
Score date term date1 times
6 34 3 min 2 NaT 00:03:00
9 536 11 min 1 NaT 00:11:00
3 15 1 hrs 2 NaT 01:00:00
10 53 2 hrs 1 NaT 02:00:00
8 101 7 hrs 1 NaT 07:00:00
1 47 1 Feb 1 1900-02-01 NaT
0 72 3 Feb 1 1900-02-03 NaT
7 26 3 Feb 3 1900-02-03 NaT
5 153 4 Feb 3 1900-02-04 NaT
2 119 6 Feb 1 1900-02-06 NaT
4 33 7 Feb 1 1900-02-07 NaT
11 20 11 Feb 3 1900-02-11 NaT
关于python - 使用字符串日期对 pandas csv 列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60238202/