【发布时间】:2019-02-28 21:48:09
【问题描述】:
我有一个 Pandas 数据框,我想在每个月的第三个星期五重新采样一次。
np.random.seed(0)
#requested output:
dates = pd.date_range("2018-01-01", "2018-08-31")
dates_df = pd.DataFrame(data=np.random.random(len(dates)), index=dates)
mask = (dates.weekday == 4) & (14 < dates.day) & (dates.day < 22)
dates_df.loc[mask]
但是当缺少第三个星期五时(例如,下降 2 月的第三个星期五 星期五),我想要最新的值(截至2018-02-15)。使用掩码给了我下一个值(2 月 17 日而不是 2 月 15 日):
# remove February third Friday:
dates_df = dates_df.drop([pd.to_datetime("2018-02-16")])
mask = (dates.weekday == 4) & (14 < dates.day) & (dates.day < 22)
dates_df.loc[mask]
将每月重采样与 loffset 结合使用可得出月末值并抵消索引,这也不是我想要的:
from pandas.tseries.offsets import WeekOfMonth
dates_df.resample("M", loffset=WeekOfMonth(week=2, weekday=4)).last()
是否有替代方法(最好使用重新采样),而不必先重新采样到每日值,然后添加掩码(这需要很长时间才能在我的数据帧上完成)
【问题讨论】:
-
您是否尝试过其他偏移,例如业务月末频率pandas.pydata.org/pandas-docs/stable/… 这是相关帖子stackoverflow.com/questions/29871564/…
-
恐怕使用偏移量对我没有帮助,因为它只会改变索引。
-
你能提供预期输出的例子吗?使
numpy.random可预测使用np.random.seed(0) -
如果缺少第三个星期五,为什么第一个解决方案不起作用?
-
我更新了示例。这表明二月份没有第三个星期五时缺少二月份的输出
标签: python pandas time-series