给定一个数据框 df,我想根据前 n 行(例如前 3)中的值为每一行生成一个新变量/列。
例如,给定以下内容:
输入
A B C
10 2 59.4
53 3 71.5
32 2 70.4
24 3 82.1
D 的计算:如果在 C 中的实际行或 C 中的前 3 行中有 2 个或更多单元格 > 70,则为 1,否则为 0
输出
A B C D
10 2 59.4 0
53 3 71.5 0
32 2 70.4 1
24 3 82.1 1
我应该如何在熊猫中做到这一点?
我认为@RafaelC 的答案是正确的方法。我正在添加一个答案,以 (a) 提供更好的示例数据,涵盖边缘情况和 (b) 稍微调整@RafaelC 的语法。特别是:
min_periods = 1
允许索引值小于窗口的早期行是非NaN
window = 4
允许考虑当前条目加上前 3 个条目 sum()
而不是size
仅获True
取值更新代码:
window = 4
df.C.rolling(window, min_periods=1).apply(lambda x: (x>70).sum()>=2)
数据:
A B C
10 2 59.4
53 3 71.5
32 2 70.4
24 3 82.1
11 4 10.1
10 5 1.0
12 3 2.3
13 2 1.1
99 9 70.2
12 9 80.0
根据 OP 规则的预期输出:
0 0.0
1 0.0
2 1.0
3 1.0
4 1.0
5 1.0
6 0.0
7 0.0
8 0.0
9 1.0
Name: C, dtype: float64
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句