鉴于aaa,bbb,pos是同等大小的数据帧
我想知道是否有更多的pythoninc方式来执行以下操作:
for x in range(1, len(aaa)):
for y in range(0, len(aaa.columns)):
if aaa.iloc[x,y]>bbb.iloc[x,y] and aaa.iloc[x-1,y]<bbb.iloc[x,y]:
pos.iloc[x-1,y]=12
答案 0 :(得分:2)
除非我遗漏了什么,否则你需要做的就是建立一个面具并转移它:
mask = ((aaa > bbb) & (aaa.shift() < bbb))
mask = mask.shift(-1).fillna(False)
pos[mask] = 12
例如:
>>> aaa
0 1 2 3
0 -1.247550 0.456291 -0.185969 -0.675125
1 -0.495517 -1.451255 0.862562 -1.064612
2 1.026445 0.180647 -0.153980 0.685134
>>> bbb
0 1 2 3
0 0.731204 1.241322 0.594712 -0.166606
1 -0.067717 0.207725 0.021185 -0.893406
2 0.656187 -0.536448 -0.292571 -0.586492
>>> mask
0 1 2 3
0 False False True False
1 True True False True
2 False False False False
>>> orig(aaa,bbb,pos)
0 1 2 3
0 0 0 12 0
1 12 12 0 12
2 0 0 0 0
>>> new
0 1 2 3
0 0 0 12 0
1 12 12 0 12
2 0 0 0 0