我希望按日期排列数据框,但是,日期是每一行中字符串的一部分。必须按天顺序重新排列行。
来自堆栈溢出的其他解决方案显示了如何仅基于日期列进行排序,此示例有所不同,因为其他信息是每个字符串的一部分,并且与日期混合在一起。
数据框是具有索引的一列,但是行的排列顺序不是从每个字符串的最右边的日期开始。 分数是随机的,不需要任何注意。
0
__________________________
0 score17 6-20-19.xlsx
1 score23 6-7-19.xlsx
2 score4 6-17-19.xlsx
3 score34 6-8-19.xlsx
4 score10 6-7-19.xlsx
预期的数据框应如下所示(重复的日期对彼此之间的顺序没有偏好,索引也没有关系)。各个分数必须与它们的关联日期保持一致。
0
__________________________
1 score23 6-7-19.xlsx
4 score10 6-7-19.xlsx
3 score34 6-8-19.xlsx
2 score4 6-17-19.xlsx
0 score17 6-20-19.xlsx
这是什么方法?
答案 0 :(得分:0)
一种使用普通字符串表达式创建一些列,然后进行相应排序的粗略方法。
首先,我建议您对列进行“剥离”以确保前导/滞后空格不是问题,例如示例非标准间距。
df['column_name'] = df['column_name'].str.strip()
然后您可以像这样在第一个“空格”('')处拆分列,请注意,这将创建两列:
df[['score', 'date']] = df['column_name'].str.split(' ', n=1, expand=True)
然后您可以在句点('。')分隔“日期”列,以摆脱扩展名:
df['date'] = df['date'].str.split('.', expand = True)
然后将“日期”列转换为日期时间:
df['date'] = df['date'].astype('datetime64[ns]')
现在,您可以根据此“日期”列对数据框进行排序,并根据所需格式将ascending设置为True / False。
df.sort_values(by='date', ascending = False)