什么是等效的pandas .resample()方法?

问题描述 投票:6回答:4

这是我发现的最近的链接:https://stats.stackexchange.com/questions/5305/how-to-re-sample-an-xts-time-series-in-r

但我没有看到任何关于聚合数据的方法(如平均值,计数,匿名函数),你可以在熊猫中做到这一点。

对于我的程序,我试图让数据帧每2分钟重新采样一次,并取每个间隔的2个值的平均值。谢谢!

python r pandas
4个回答
2
投票

如果你使用data.tablelubridate它可能看起来像这样

library(data.table)
library(lubridate)
#sample data
dt<-data.table(ts=seq(from=ymd('2015-01-01'), to=ymd('2015-07-01'),by='mins'), datum=runif(260641,0,100))

如果你想从一分钟到一小时获得数据意味着你可以做到

 dt[,mean(datum),by=floor_date(ts,"hour")]

如果你有一堆列,并且你希望所有这些都是平均值,那么你可以做到

dt[,lapply(.SD,mean),by=floor_date(ts,"hour")]

您可以将mean替换为您想要的任何功能。您可以将“小时”替换为“秒”,“分钟”,“小时”,“日期”,“周”,“月”,“年”。嗯,你不能从一分钟到几秒钟,因为这需要魔法,但无论如何你可以从微秒到秒。

不可能将一系列从较低的周期性转换为较高的周期性 - 例如每周到每天或每天到5分钟的酒吧,因为这需要魔法。

-Jeffrey Ryan来自xts手册。

我从来没有学过xts所以我不知道使用xts对象的语法,但是这条线很有名(或者至少就像手册中的一行一样出名)


3
投票

我发现这个主题寻找pandas resample()的R等价物,但是对于xts对象。我发布一个解决方案以防万一,时间差为五分钟,其中ts是一个xts对象:

period.apply(ts, endpoints(ts, k=5, "minutes"), mean)

0
投票

你有没看过R COIN套餐?这是一个教程,可以帮助您弄清楚这是否是您正在寻找的:http://www.statmethods.net/stats/resampling.html

有关该包装的更多信息,请访问:https://cran.r-project.org/web/packages/coin/coin.pdf


0
投票

您可以使用网状来利用pandas方法

require(reticulate)
pd <- import("pandas")

df <- r_to_py(df) #Transform to Pandas DataFrame
df = df$set_index(pd$DatetimeIndex(df['Date']))
#df_meidan_hours=df$resample('1H', how='median', closed='left', label='left')
df_meidan_hours=df$resample('1H',closed='left', label='left')$agg('median')
df_meidan_hours <- py_to_r(df_meidan_hours) #Transform back to r's data.frame
© www.soinside.com 2019 - 2024. All rights reserved.