【问题标题】:Pandas Replace NaN or Blank values with Previous Value for Matching RowPandas 将 NaN 或空白值替换为匹配行的先前值
【发布时间】:2021-01-06 17:34:16
【问题描述】:

我的数据如下:

Name    Group
Jess    1
Jess    
John    2
John    2
Jeff    2
Jeff    
Fred    3
Fred    3
Fred    
Henry   2
Henry   2

我正在尝试查找此人具有空白组的所有行,然后将该空白值替换为已在该个人的表中找到的值。

我的计划是找出所有的空白值。

df[(pd.isna(df['Group']))]

然后编写 for 循环以在整个数据帧中搜索该人的值,然后用该值替换空白值。

for name in df_blank['Name'].unique():    
    df2 = df[(pd.notna(df['Group']) & df['Name']==name)]['Group'].unique()
    df_blank['Group'] == df2['Group'].value

但是我确信这不是最有效的方法。任何人都可以帮助以更有效的方式执行此操作吗?

谢谢!

【问题讨论】:

    标签: pandas dataframe iteration


    【解决方案1】:

    使用 groupby().transform('first') 仅适用于 NaN 值:

    df['Group'] = df.groupby('Name')['Group'].transform('first')
    

    要同时使用NaN 和空白字符串,我们可以在转换之前替换:

    df['Group'] = (df['Group'].replace('', np.NaN)
                      .groupby(df['Name'])
                      .tranform('first')
                  )
    

    【讨论】:

      猜你喜欢
      • 2018-12-05
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 2016-10-23
      • 2017-07-04
      • 2015-01-06
      相关资源
      最近更新 更多