以更加Pythonic的方式有条件地改变Pandas Dataframe的元素

时间:2015-03-26 17:38:51

标签: python pandas

鉴于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

1 个答案:

答案 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