给定一个数据帧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
我该怎么做在大熊猫中?
答案 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