R 如何按月订购/排序数据帧?

R 如何按月订购/排序数据帧?,r,dataframe,R,Dataframe,所以我用多年(1961-2019)的月降水量数据制作了这个数据框架。但不知何故,我的数据帧最终变得一团糟(查看图片)。有没有办法按月对我的数据进行排序?由于某种原因,我得到了第一个四月,然后是十一月,六月等等,我不知道如何改变它 您可能需要尝试类似的方法 month year pp 1 April 1961 1.510 2 August 1961 1.239 3 December 1962 3.658 4 February 1962 2.982 将熊猫作为pd导入 从

所以我用多年(1961-2019)的月降水量数据制作了这个数据框架。但不知何故,我的数据帧最终变得一团糟(查看图片)。有没有办法按月对我的数据进行排序?由于某种原因,我得到了第一个四月,然后是十一月,六月等等,我不知道如何改变它


您可能需要尝试类似的方法

     month year    pp
1    April 1961 1.510
2   August 1961 1.239
3 December 1962 3.658
4 February 1962 2.982
将熊猫作为pd导入
从日期时间导入日期时间
#在这里,我用您发布的示例日期制作了一个数据框
数据=[(1961年4月,1.5100000),(1961年8月,1.2935484),(1961年12月,3.6580645),(1961年2月,2.9821429),(1961年1月,5.0000000),(1962年1月,6.0000000)]
df=pd.DataFrame(数据,列=[“月”、“年”、“前”])
#因此,我们根据您的月份和年份创建一个新的datetime列
df['date']=pd.to_datetime(df.year.astype(str)+df.month,格式=“%Y%B”)
#最后我们把它分类!
df.sort_值(“日期”)
结果就是这样

      month  year      prec       date
4   January  1961  5.000000 1961-01-01
3  February  1961  2.982143 1961-02-01
0     April  1961  1.510000 1961-04-01
1    August  1961  1.293548 1961-08-01
2  December  1961  3.658065 1961-12-01
5   January  1962  6.000000 1962-01-01
注意:

如果要按月份排他性排序,可以使用下一个代码将“月份”列更改为其数值:

df['month']=pd.to_datetime(df.month,格式='%B').dt.month
df.sort_值(“月”)
你会得到

   month  year      prec
4      1  1961  5.000000
5      1  1962  6.000000
3      2  1961  2.982143
0      4  1961  1.510000
1      8  1961  1.293548
2     12  1961  3.658065
这应该行得通

## create data
month <- c('April','August', 'December', 'February')
year <- c(1961, 1961, 1962, 1962)
pp <- c(1.51,1.239,3.658,2.982)
df <- cbind.data.frame(month, year, pp)
现在我们可以创建一个日期进行排序

## create date
df$date <- as.Date(paste(df$month, '01', df$year), format="%b %d %Y")

## sort dataframe by date
df <- df[order(df$date),]
如果您不关心年份,则可以将月份名称与该月份的实际数字相匹配,并根据该数字进行排序,如下所示:

df$month_number <- match(df$month,month.name)
df[order(df$month_number),]

1961年4月1.5100000 1961年8月1.2935484 1961年12月3.6580645 1961年2月4日2.982145 1961年1月5.0000000明白了,但是我如何在R Studio中使用pd.DataFrame函数?有我需要下载的软件包吗?对不起,我没有看到您正在使用R。因此,您可以使用
strtime
创建月份或日期时间列,如下所示:
df[['date']]
df$month_number <- match(df$month,month.name)
df[order(df$month_number),]
     month year    pp       date
4 February 1962 2.982 1962-02-01
1    April 1961 1.510 1961-04-01
2   August 1961 1.239 1961-08-01
3 December 1962 3.658 1962-12-01