【发布时间】:2021-03-10 11:28:16
【问题描述】:
我在熊猫中滚动使用.apply 或.aggregate 时遇到了一些麻烦(当然假设这是解决我的问题的正确方法)。假设我有一个包含两列 A 和 B 的数据框。如果 A 的值为 1,我想创建一个包含 B 的滚动平均值的列 C。更一般地说,我希望能够应用滚动自定义函数,某些条件涉及数据框的几列(例如,当 B > x 和/或 C = y 等时,列 A 的滚动总和等)。
import pandas as pd
import numpy as np
df2 = pd.DataFrame({'A':[1,1,1,0,0,0,1,1,1],'B': [50,40,50,-20,20,10,10,-5,-2]}, index = np.arange(9))
所需的输出将是(假设滚动窗口为 3):
df2 = pd.DataFrame({'A':[1,1,1,0,0,0,1,1,1],'B': [50,40,50,-20,20,10,10,-5,-2],\
'C': [np.nan, np.nan, 46.67, 45, 50, np.nan, 10, 2.50, 1]}, index = np.arange(9))
我尝试定义一个函数mean_1如下:
def mean_1(x):
return np.where(x['A'] == 1, np.mean(x['B']), np.nan)
df2['C'] = df2.rolling(3).apply(mean_1)
并得到错误:'Series' object has no attribute 'A'
我想这与文档中的raw = False 有关
谢谢
【问题讨论】:
-
你使用的是什么版本的 numpy 和 pandas?我无法重现您的错误。
-
@NabilDaoud 熊猫 1.1.2 和 numpy 1.18.5
标签: pandas rolling-computation