使用Python按月分组对每日数据进行排序

时间:2020-04-05 10:20:25

标签: python excel pandas

我有11年的每日流量数据,如图所示。我想按每个月的降序对流值进行排序(每个月都有自己的降序,即,第10个月像107,98,86 ...而第11个月像170,154,144...。但是它们都是在同一数据框中)

Excel file

2 个答案:

答案 0 :(得分:1)

如有必要,您可以通过to_datetimeDATE列转换为日期时间,然后通过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