代码之家  ›  专栏  ›  技术社区  ›  Jake Morris

在数据帧中水平移动布尔值

  •  1
  • Jake Morris  · 技术社区  · 7 年前

    假设我有一个布尔数据帧,叫做 original

    original = pd.DataFrame([
        [True, False, False, True, False],
        [False, True, False, False, False]
    ])
    
      0     1     2     3     4
    0 True  False False True  False
    1 False True  False False False
    

    我想创建以下布尔数据帧(True右边的所有现在都应该是True):

      0     1     2     3     4
    0 False True  True  True  True
    1 False False True  True  True
    

    我已经完成了以下工作,但我想知道是否有人有一个不那么麻烦的方法:

    original.shift(axis=1).fillna(False).astype(int) \
        .T.replace(to_replace=0, method='ffill').T.astype(bool)
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   piRSquared    7 年前

    cummax

    original.cummax(1).shift(axis=1).fillna(False)
    
           0      1     2     3     4
    0  False   True  True  True  True
    1  False  False  True  True  True
    
        2
  •  1
  •   BENY    7 年前

    IIUC公司

    original[original].shift(1,axis=1).ffill(1).fillna(0).astype(bool)
    Out[77]: 
           0      1     2     3     4
    0  False   True  True  True  True
    1  False  False  True  True  True