python - 使用 Python 对每月组中的每日数据进行排序
问题描述
如图所示,我有 11 年的每日流量数据。我想按降序对每个月的流量值进行排序(每个月都有自己的降序,即第 10 个月就像 107,98,86 ......第 11 个月就像 170,154,144,......但它们都是在同一数据框中)
解决方案
DATE
如有必要,您可以通过 将列转换为日期时间,然后通过dlast 按多列排序to_datetime
创建月期间列:Series.dt.to_period
DataFrame.sort_values
np.random.seed(2020)
rng = pd.date_range('1989-10-01', periods=50)
df = pd.DataFrame({'DATE (Month, Day, Year)': rng,
'STREAMFLOW (CFS)': np.random.randint(1000, size=50)})
print (df.head(10))
DATE (Month, Day, Year) STREAMFLOW (CFS)
0 1989-10-01 864
1 1989-10-02 392
2 1989-10-03 323
3 1989-10-04 630
4 1989-10-05 707
5 1989-10-06 91
6 1989-10-07 637
7 1989-10-08 643
8 1989-10-09 583
9 1989-10-10 952
#already datetimes
#df['DATE (Month, Day, Year)'] = pd.to_datetime(df['DATE (Month, Day, Year)'], dayfirst=True)
df['per'] = df['DATE (Month, Day, Year)'].dt.to_period('m')
df = df.sort_values(['per', 'STREAMFLOW (CFS)', ], ascending=[True, False])
print (df.head(10))
DATE (Month, Day, Year) STREAMFLOW (CFS) per
29 1989-10-30 980 1989-10
14 1989-10-15 970 1989-10
20 1989-10-21 958 1989-10
9 1989-10-10 952 1989-10
13 1989-10-14 920 1989-10
22 1989-10-23 870 1989-10
0 1989-10-01 864 1989-10
28 1989-10-29 806 1989-10
15 1989-10-16 777 1989-10
4 1989-10-05 707 1989-10
推荐阅读
- yeoman - 找不到“哟”二进制文件。确保它已安装并在您的 $PATH 中。你能告诉我问题是什么吗?
- java - ConcurrentModificationException 偶尔
- google-sheets - 如何准确识别 Google 表格中的错误类型?
- c# - 有没有办法让十字准线固定在玩家的 Y 轴上(2d 上视图)并在 Y 轴上移动,与鼠标光标一样远?
- css - 更好地显示表格中的单选按钮 - 仅限 CSS 的解决方案
- python - 如何在pyqt5中设置快捷方式,以便可以从字符串变量中设置快捷方式?
- javascript - 在 iOS Safari 下使用 getUserMedia 流式传输麦克风输入
- scala - Sink.actorRefWithAck 可以批量发送消息吗?
- javascript - 从 ExcelJS 工作簿生成 Base64
- mysql - MySQL 查询中的 % 的 LEN()