我有11年的每日流量数据,如图所示。我想按每个月的降序对流值进行排序(每个月都有自己的降序,即,第10个月像107,98,86 ...而第11个月像170,154,144...。但是它们都是在同一数据框中)
答案 0 :(得分:1)
如有必要,您可以通过to_datetime
将DATE
列转换为日期时间,然后通过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
答案 1 :(得分:0)
使用
将日期列转换为熊猫datetime对象df['Date'] =pd.to_datetime(df.Date)
然后按日期排序
df.sort_values(by='Date')
您可以看到更详细的答案here