【问题标题】:How to convert DatetimeIndexResampler to DataFrame?如何将 DatetimeIndexResampler 转换为 DataFrame?
【发布时间】:2019-01-23 10:54:46
【问题描述】:

我想从系列构建一个矩阵,但在此之前我必须重新采样这些系列。但是,为了避免使用 replace(np.nan, 0.0) 处理整个矩阵两次,我想将数据帧附加到收集数据帧,然后一次性删除 NaN 值。

所以不是

user_activities = user.groupby(["DOC_ACC_DT", "DOC_ACTV_CD"]).agg("sum")["SUM_DOC_CNT"].unstack().resample("1D").replace(np.nan, 0)
df = df.append(user_activities[activity].rename(user_id))

我想要

user_activities = user.groupby(["DOC_ACC_DT", "DOC_ACTV_CD"]).agg("sum")["SUM_DOC_CNT"].unstack().resample("1D")
df = df.append(user_activities[activity].rename(user_id))

但这不起作用,因为user_activities 不是resample() 之后的数据框。

错误提示我尝试apply(),但该方法需要一个参数:

/usr/local/lib/python2.7/dist-packages/pandas/core/groupby.pyc in _make_wrapper(self, name)
    507                    "using the 'apply' method".format(kind, name,
    508                                                      type(self).__name__))
--> 509             raise AttributeError(msg)
    510 
    511         # need to setup the selection

AttributeError: Cannot access callable attribute 'rename' of 'SeriesGroupBy' objects, try using the 'apply' method

我该如何解决这个问题?

【问题讨论】:

  • user_activitiesresample 之后是什么?
  • resample 不再返回数据帧:它现在在聚合或插值时“延迟评估”。 => 根据您的用例,将.resample("1D") 替换为.resample("1D").mean()(即缩小)或.resample("1D").interpolate()(放大)可能是您所追求的,它们都返回一个数据框。

标签: python pandas


【解决方案1】:

.resample 的接口在 Pandas 0.18.0 中已更改为更类似于 groupby,因此更灵活,即resample 不再返回 DataFrame:它现在在聚合或插值时“延迟评估” .

我建议阅读 resample API changes http://pandas.pydata.org/pandas-docs/stable/whatsnew.html#resample-api

另见:

用于升级

df.resample("1D").interpolate()

用于缩小

使用均值

df.resample("1D").mean()

使用 OHLC

即开高低收盘价或第一个最大最小最后一个值

df.resample("1D").ohlc()

【讨论】:

    猜你喜欢
    • 2022-12-18
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2017-12-31
    • 2022-01-22
    • 2013-05-25
    • 2020-06-14
    相关资源
    最近更新 更多