如何创建一个新的布尔列来处理前n行中的信息

时间:2018-07-27 23:09:39

标签: python pandas

给定一个数据帧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

我该怎么做在大熊猫中?

2 个答案:

答案 0 :(得分:1)

IIUC,应使用rolling,并在apply

中建立逻辑
window = 3
df.C.rolling(window).apply(lambda s: 1 if (s>=70).size >= 2 else 0)

0    NaN
1    NaN
2    1.0
3    1.0

您还可以fillnaNaN变成0

.fillna(0)

0    0.0
1    0.0
2    1.0
3    1.0

答案 1 :(得分:0)

我认为@RafaelC的答案是正确的方法。我为(a)提供涵盖边缘情况的更好示例数据以及(b)略微调整@RafaelC的语法提供了一个答案。特别是:

  • min_periods = 1允许索引值小于窗口的早期行为非NaN
  • window = 4允许考虑当前条目以及前三个条目
  • 使用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