【问题标题】:Replace values in a list by the preceding value in pandas用 pandas 中的前一个值替换列表中的值
【发布时间】:2021-04-01 15:04:41
【问题描述】:

我有以下数据框:

df1 = pd.DataFrame({'Name':['Aaron Lopez','Mon','Tue','Wed','Thu','Fri','Sat','Sun', 'Date',
                            'Adan Gabriel','Mon','Tue','Wed','Thu','Fri','Sat','Sun', 'Date']})

我想用前一天来的人的名字替换天的名字。

我想看看:

Name
Aaron Lopez
Aaron Lopez
Aaron Lopez
Aaron Lopez
Aaron Lopez
Aaron Lopez
Aaron Lopez
Aaron Lopez
Adan Gabriel
Adan Gabriel
Adan Gabriel
Adan Gabriel
Adan Gabriel
Adan Gabriel
Adan Gabriel
Adan Gabriel

【问题讨论】:

    标签: pandas list


    【解决方案1】:

    选择df.Name=='Date' 或当df.Name 转换为日期时间时不会导致NaN 值。选择后,将True 值设为NaNs。一周中的所有天数和日期将为 NaN。然后使用fillna 向前填充。

    import numpy as np
    df1=df1.assign(Name=np.where((pd.to_datetime(df1.Name, format='%a', errors='coerce')).notna()|df1.Name.eq('Date'),np.nan,df1.Name))
    df1['Name']=df1.Name.ffill()
    
    
    
       Name
    0    Aaron Lopez
    1    Aaron Lopez
    2    Aaron Lopez
    3    Aaron Lopez
    4    Aaron Lopez
    5    Aaron Lopez
    6    Aaron Lopez
    7    Aaron Lopez
    8    Aaron Lopez
    9   Adan Gabriel
    10  Adan Gabriel
    11  Adan Gabriel
    12  Adan Gabriel
    13  Adan Gabriel
    14  Adan Gabriel
    15  Adan Gabriel
    16  Adan Gabriel
    17  Adan Gabriel
    

    【讨论】:

      【解决方案2】:

      您可以使用mask,然后使用ffill

      mask = df1['Name'].eq('Date').shift(fill_value=0).cumsum()
      
      df1['Name'] = df1['Name'].mask(mask.duplicated()).ffill()
      

      输出:

                  Name
      0    Aaron Lopez
      1    Aaron Lopez
      2    Aaron Lopez
      3    Aaron Lopez
      4    Aaron Lopez
      5    Aaron Lopez
      6    Aaron Lopez
      7    Aaron Lopez
      8    Aaron Lopez
      9   Adan Gabriel
      10  Adan Gabriel
      11  Adan Gabriel
      12  Adan Gabriel
      13  Adan Gabriel
      14  Adan Gabriel
      15  Adan Gabriel
      16  Adan Gabriel
      17  Adan Gabriel
      

      【讨论】:

        猜你喜欢
        • 2017-04-01
        • 1970-01-01
        • 2019-09-07
        • 2019-07-16
        • 2021-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-16
        相关资源
        最近更新 更多