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

Python 如何创建一个新的布尔列来处理前n行中的信息,python,pandas,Python,Pandas,给定一个dataframe df,我想基于前n行(例如前3行)中的值为每一行生成一个新变量/列 例如,考虑到以下情况: 输入 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 我应该如何在pandas中实现它?IIUC,应该使用滚动并在应用程序中构建您的逻辑 您还可以填充NA以将NaN转换为0 我认为@

给定一个dataframe df,我想基于前n行(例如前3行)中的值为每一行生成一个新变量/列

例如,考虑到以下情况:

输入

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
我应该如何在pandas中实现它?

IIUC,应该使用滚动并在应用程序中构建您的逻辑

您还可以填充NA以将NaN转换为0


我认为@RafaelC的答案是正确的。我添加了一个答案,以提供更好的示例数据,涵盖边缘情况,并稍微调整@RafaelC的语法。特别是:

min_periods=1允许索引值小于窗口的早期行为非NaN 窗口=4允许考虑当前条目加上前3个条目 使用sum而不是size仅获取真值 更新代码:

window = 4
df.C.rolling(window, min_periods=1).apply(lambda x: (x>70).sum()>=2)
数据:

根据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

不,因为在第三行中,71.5和70.4符合条件。如果在OP的原始数据之后再添加一些示例案例,则不确定这是否有效-尝试向C添加4个小于70的值。window=4如何;df.rollingwindow,最小周期=1.applylambda x:x>70。总和>=2?这似乎可以正确处理边缘情况。
.fillna(0)

0    0.0
1    0.0
2    1.0
3    1.0
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
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