如何创建一个布尔列,将接下来的n行的值与一行的实际值进行比较

时间:2018-07-30 19:00:38

标签: python pandas

给定一个数据帧df,我想基于接下来的n行(例如接下来的3行)中的值为每一行生成一个新列。并且,如果该值大于x(例如30),则返回1,否则返回0。

例如,给出以下内容:

输入

A  B  C
14 3 32
28 3 78
15 4 68
42 3 42
24 4 87
13 3 65

D的计算:如果接下来的n行(在本例中为3)中的任何一个的值大于实际行(n)+30的值,则返回1,否则返回0

输出

A  B  C  D
14 3 32  1     # 32+30 = 62 so [78>=62, 68>=62]
28 3 78  0     # 78+30 = 108 
15 4 68  0     # 68+30 = 98
42 3 42  1     # 42+30 = 72 so [87>=72]  
24 4 87  0     # 87+30 = 117
13 3 65  0     # 65+30 = 95

我该怎么做在大熊猫中?

2 个答案:

答案 0 :(得分:2)

您可以使用:

df['D'] = np.where((df.C+30<=df.C.shift(-1)) | ((df.C+30<=df.C.shift(-2))),1,0)

输出:

     A  B   C   D
0   14  3   32  1
1   28  3   78  0
2   15  4   68  0
3   42  3   42  1
4   24  4   87  0
5   13  3   65  0

答案 1 :(得分:2)

IIUC rolling

df.C.iloc[::-1].rolling(3,min_periods=1).max().iloc[::-1].gt(df.C+30).astype(int)
Out[509]: 
0    1
1    0
2    0
3    1
4    0
5    0
Name: C, dtype: int32