A列与B列上一行的值比较 B列也要与A列上一行的值比较

这样看的话,就是交叉比较,每一个值都只和另一列的上一行值有关,那么我们完全可以将a列和b列拆分开,按照这种交叉形式重新组合出c列和d列,也就是将a列和b列的每个元素交叉互换一下。

a = [0, 1, 2, 3]
b = [a, b, c, d]
c = [0, b, 2, d]
d = [a, 1, c, 3]


如此一来,问题就简化成对c和d直接做 cummin 了

最后的两列就是答案

df = pd.DataFrame(np.random.random((10,2)),
                  columns = ['A', 'B'])
df['sign'] = df.index % 2
'''swap A and B to generate AA and BB
AA -> sign == 0:
  A even row + B odd row
BB -> sign == 1:
  A odd row + B even row
'''
df[['AA','BB']] = df[['A','B']].where(df['sign'] == 0, df[['B','A']].values)
df[['minA','minB']] = df[['AA','BB']].cummin().where(df['sign'] == 0, df[['BB','AA']].values)
df

condition和sign两个条件需要一起考虑才行,我这样做不对。加入了condition后问题复杂了

posted @ 2022-07-02 09:32  C羽言  阅读(54)  评论(0)    收藏  举报