【发布时间】:2017-06-21 10:56:57
【问题描述】:
我有一个数据框(包含“a”、“b”、“c”列),我正在其上进行滚动窗口。
我希望能够使用 apply 函数中的一列(比如“a”)过滤滚动窗口,如下所示
df.rolling(len(s),min_periods=0).apply(lambda x: x[[x['a']>10][0] if len(x[[x['a']>10]]) >=0 else np.nan)
上面一行的目的是选择滚动窗口中'a'列值大于10的第一行。如果没有这样的行,则返回nan。
但我无法这样做并收到以下错误
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
这意味着我根本不允许通过这种语法访问各个列。 有没有其他方法可以做这种事情?
【问题讨论】:
-
你检查过
x[[x['a']>10][0]是什么吗? -
@AndrewL 显然我根本不允许访问“a”列。错误是说索引只能是整数、切片 (
:)、省略号 (...)、numpy.newaxis (None) 和整数或布尔数组 -
查看示例数据会很有帮助
-
顺便说一句,您根本没有选择“a”列-您将其应用于整个数据框。您需要更改为:
df['a'].rolling(len(s),min_periods=0).apply()
标签: python python-2.7 pandas