【发布时间】:2017-01-17 15:39:47
【问题描述】:
我想以“滚动”方式获取数据帧子集。 我尝试了几件事但没有成功,这是我想做的一个例子。让我们考虑一下数据框。
df
var1 var2
0 43 74
1 44 74
2 45 66
3 46 268
4 47 66
我想使用以下函数创建一个新列,该函数执行条件求和:
def func(x):
tmp = (x["var1"] * (x["var2"] == 74)).sum()
return tmp
这样称呼它
df["newvar"] = df.rolling(2, min_periods=1).apply(func)
这意味着该函数将基于数据框应用,而不是针对每一行或每一列
它会返回
var1 var2 newvar
0 43 74 43 # 43
1 44 74 87 # 43 * 1 + 44 * 1
2 45 66 44 # 44 * 1 + 45 * 0
3 46 268 0 # 45 * 0 + 46 * 0
4 47 66 0 # 46 * 0 + 47 * 0
有没有pythonic的方法来做到这一点? 这只是一个示例,但条件(始终基于子数据帧值取决于 2 列以上。
【问题讨论】: