【发布时间】:2018-02-19 10:44:54
【问题描述】:
我正在尝试计算此数据在每个滑动窗口内的持续时间:
ID
DATE
2017-05-17 15:49:51 2
2017-05-17 15:49:52 5
2017-05-17 15:49:55 2
2017-05-17 15:49:56 3
2017-05-17 15:49:58 5
2017-05-17 15:49:59 5
在此示例中,DATE 是索引,我试图获取大小为 3 的滚动窗口内的持续时间,它们相互重叠。答案应该是这样的:
ID duration
DATE
2017-05-17 15:49:51 2 4
2017-05-17 15:49:52 5 4
2017-05-17 15:49:55 2 3
2017-05-17 15:49:56 3 3
2017-05-17 15:49:58 5 NaN
2017-05-17 15:49:59 5 NaN
我试过了:
df['duration'] = df.rolling(window=3).apply(df.index.max()-df.index.min())
但是我收到了这个错误:
TypeError: 'DatetimeIndex' object is not callable
【问题讨论】:
-
试试
df['duration'] = df.rolling(window=3).apply(lambda x: x.index.max()-x.index.min()) -
我之前做过,我收到了这个错误
AttributeError: 'numpy.ndarray' object has no attribute 'index' -
我也试试这个
df['duration'] = df.rolling(5).apply(lambda x: pd.to_datetime(x.index.max()) - pd.to_datetime(x.index.min()))得到同样的错误AttributeError: 'numpy.ndarray' object has no attribute 'index' -
正如链接问题所解释的那样,
rolling适用于 numpy 数组,而不是数据框,因此您无法访问其中的所有 pandas 功能。您必须找到基于数组索引的解决方法。
标签: python pandas numpy machine-learning data-mining