下面是一个示例数据帧,我将使用它来更好地说明我的问题:
import pandas as pd
df = pd.DataFrame(pd.np.random.rand(30, 3), columns=tuple('ABC'))
df['event'] = pd.np.nan
df.loc[10, 'event'] = 'ping'
df.loc[20, 'event'] = 'ping'
df.loc[19, 'event'] = 'pong'
我需要创建以ping
为中心的n行的窗口。在
换句话说,让i
是event
列中包含ping
的行的索引。对于每个i
,我想选择df.ix[i-n:i+n]
。在
因此,对于n=3
,我期望得到以下结果:
一些注意事项:
pong
值,我们不想将窗口置于中心位置。但是,它是在第二个ping
中心的结果中捕获的。在如何做到这一点?在
也许:
一种方法是使用嵌套np.哪里条款。这不是最漂亮的代码,但它确实起了作用。在
有人能帮我把i=1的案子转到普通案件吗?在
编辑:实际上,它们不需要嵌套。这样做可以:
^{pr2}$选择所需范围的索引器,例如目标索引+-3(取决于帧大小的最大/最小值)。把它们串联起来,消除重复。在
^{pr2}$选择它们。在
请注意,您可能需要执行
df.reset_index()
(在选择获取实际的行索引位置,而不是值之前)。在注意这里的错误是'event'列的设置将所有内容转换为object,请参见here。您可以使用
df.convert_objects()
来缓解。在相关问题 更多 >
编程相关推荐