【发布时间】:2019-01-17 08:23:50
【问题描述】:
假设我有一个带有日期时间索引的pandas.Series:
srs = pd.Series(index = pd.date_range('2013-01-01','2013-01-10' )).fillna(1)
我可以使用expanding 函数来计算级数的扩展总和。
srs.expanding(5).sum()
但是,我无法使用扩展功能访问该系列的其他属性(比如它的索引)。例如通过运行:
srs.expanding(5).apply(lambda x: x.index[-1])
我得到错误:
AttributeError: 'numpy.ndarray' object has no attribute 'index'
为什么将组作为numpy 数组而不是pandas.Series 传递?还有其他方法可以使用扩展/滚动功能来访问索引吗?
【问题讨论】:
-
我相信无论索引拆分是什么,扩展和滚动都会通过
.values切片 -
您可以通过定义一个函数和所传递参数的打印类型来测试这一点。
-
def f(x):print(type(x),x)return 0srs.expanding(5).apply(f) -
是的,只有 np.array 被传递,而不是带有索引的数据框。
-
您可以将
raw=False传递给apply(这是一个参数,用于指示您是将数据作为numpy 数组还是作为Series 传递并且在groupby.apply中也有效)。这将在您的示例中失败,因为您的 lambda 函数不返回数字,但我假设它仅用于说明目的。
标签: python pandas datetime dataframe