python - 如何以这种特定方式按日期对 Pandas DataFrame 进行排序?
问题描述
我正在尝试按日期对 Pandas DataFrame 进行排序,但我不希望它们纯粹升序或降序,因此df.sort_values(by=['Date'], ascending=False)
不会产生我正在寻找的结果。
我的数据框看起来像:
df = pd.DataFrame({'Date':[date(2017,1,1),date(2019,2,1),date(2018,4,1),date(2017,3,1),date(2018,3,1)],'Count':[6,8,4,14,9],'Percentage':[0.02,0.62,0.41,0.36,0.39]})
Date Count Percentage
0 2017-01-01 6 0.02
1 2019-02-01 8 0.62
2 2018-04-01 4 0.41
3 2017-03-01 14 0.36
4 2018-03-01 9 0.39
我想按日期对 DataFrame 进行排序,以便每个月按升序排列,而年份本身按降序排列。用文字表达很棘手,但期望的输出希望能更好地解释。
期望的输出:
Date Count Percentage
0 2019-02-01 8 0.62
1 2018-03-01 9 0.39
2 2018-04-01 4 0.41
3 2017-01-01 6 0.02
4 2017-03-01 14 0.36
如您所见,我想要的输出不是严格的升序或降序。必须存在我需要的相对有效的解决方案,因为我的实际 DataFrame 对于蛮力来说太大了。
解决方案
你需要的是sort_values
year 和 Month ,但是 Year 升序, Month 降序
df['Month']=df.Date.dt.month
df['Year']=df.Date.dt.year
df=df.sort_values(['Year','Month'],ascending=[False,True])
df=df.drop(['Year','Month'], axis=1)
df
Date Count Percentage
1 2019-02-01 8 0.62
4 2018-03-01 9 0.39
2 2018-04-01 4 0.41
0 2017-01-01 6 0.02
3 2017-03-01 14 0.36
推荐阅读
- minecraft - Minecraft ComputerCraft mod MiningTurtle 启动错误的操作系统
- javascript - 如何在模拟函数的回调中调用解析?
- sql - 如何在将数据插入 Hive 表时转义 html 代码数据
- elixir - Phoenix中如何分配控制器
- arrays - 如何根据 apache hive 中的键从 json 列表中提取 json 对象
- java - JPA Hibernate 查询与本机查询
- db2 - DB2 XML 框架取决于字段名
- javascript - 如何使用 js 显示用户想要查看的 iframe 数量(嵌入 YouTube)
- arrays - 将传入数据库查询与本地数据源进行创建、删除和更新比较的最佳方法是什么?
- excel - 在 R1C1 公式中使用变量