【问题标题】:Shift cell values based on Missing values根据缺失值移动单元格值
【发布时间】:2020-03-17 20:16:39
【问题描述】:

我有一个这样的 df,其中 Col1 和 Col2 根本不相关:

Col1   Col2
Apple  France
Bana   
Grape   Mexico
        Argentina
Sat     India
        Russia
        US

我想根据缺失值移动各个列

结果 df

Col1   Col2
Apple  France
Bana   Mexico
Grape   Argentina
Sat     India
        Russia
        US   

我已经看到使用 Subset 的答案,我们可以删除所有行,但我只想删除该单元格并将其余值向上移动!!

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    使用稍有改动的justify函数:

    c = ['Col1','Col2']
    #if missing values are empty strings
    df[c] = justify(df[c].to_numpy(), invalid_val='', side='up', axis=0)
    
    #if missing values are NaNs
    #df[c] = justify(df[c].to_numpy(), invalid_val=np.nan, side='up', axis=0)
    print (df)
        Col1       Col2
    0  Apple     France
    1   Bana     Mexico
    2  Grape  Argentina
    3    Sat      India
    4            Russia
    5                US
    6                  
    

    #https://stackoverflow.com/a/44559180/2901002
    def justify(a, invalid_val=0, axis=1, side='left'):    
        """
        Justifies a 2D array
    
        Parameters
        ----------
        A : ndarray
            Input array to be justified
        axis : int
            Axis along which justification is to be made
        side : str
            Direction of justification. It could be 'left', 'right', 'up', 'down'
            It should be 'left' or 'right' for axis=1 and 'up' or 'down' for axis=0.
    
        """
    
        if invalid_val is np.nan:
            mask = pd.notna(a)
        else:
            mask = a!=invalid_val
        justified_mask = np.sort(mask,axis=axis)
        if (side=='up') | (side=='left'):
            justified_mask = np.flip(justified_mask,axis=axis)
        out = np.full(a.shape, invalid_val, dtype=object) 
        if axis==1:
            out[justified_mask] = a[mask]
        else:
            out.T[justified_mask.T] = a.T[mask.T]
        return out
    

    【讨论】:

    • @RahulAgarwal - 这里的 divakar 是最好的 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多