【发布时间】:2020-05-18 02:29:33
【问题描述】:
我有一个包含两列 A 和 B 的数据框,并且想使用 rolling.apply 函数根据每个滑动窗口中 A 和 B 的值做出决定。
这是一个示例代码:
import numpy as np
import pandas as pd
np.random.seed(101)
nb=200
df = pd.DataFrame(np.random.rand(200,2),
index=pd.date_range('2020-05-15', freq='50ms', periods=nb),columns=['A','B'])
这是一个玩具函数,它使用 mean 来保持示例简单,但实际上我在每个滑动窗口的 A 和 B 上检查 DTW,然后返回一个决定。
def my_function(entry):
if (entry['A'].mean() > entry['B'].mean()):
return(1)
else:
return(0)
当尝试下面的行代码时,我得到:
“KeyError: 'A'” 使用“raw=True”时出错,并且
"IndexError: 只有整数、切片 (:)、省略号 (...)、numpy.newaxis (None) 和整数或布尔数组是有效的索引:" 使用时“原始=假”
df['decision'] = df.rolling(window='4s',min_periods=80).apply(my_function, raw=False)
我之前在 pandas resample 中使用过这种方法(entry['A])并且它有效。阅读 pandas 文档后,我发现滚动应用不会返回数据框,而是返回 ndarray (raw=True) 或系列 (raw=False)。
所以我将函数修改如下进行调试:
def my_function(entry):
print(entry.shape)
print(entry)
return(99)
上面的问题是“my_function”正在接收A列的滑动窗口(一一),然后才接收B列的滑动窗口(一一)。
因此,我无法根据每个滑动窗口的 A 列和 B 列做出决定。
我该如何解决这个问题?
【问题讨论】:
-
什么是nb?时期?
-
这个答案有帮助吗? stackoverflow.com/a/38879051 。您可能需要对其进行一些调整以使用您的日期时间滚动,但我认为您需要的所有核心想法都在那里。
-
@Scott Boston,道歉,nb=200。
标签: python pandas numpy dataframe