根据条件的 pandas fillna [英] Pandas fillna based on a condition

查看:76
本文介绍了根据条件的 pandas fillna的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我还是熊猫的新手,但是我有一个以下格式的数据框:

I'm still new to pandas, but I have a dataframe in the following format:

    d_title    d_prefix                            d_header d_country d_subtitles  d_season  d_episode
0        NaN        NaN                 ##### MOROCCO #####   Morocco         NaN       NaN        NaN
1     title1         AR                                 NaN       NaN         NaN       NaN        NaN
2     title2         AR                                 NaN       NaN         NaN       NaN        NaN
3        NaN        NaN               ##### MOROCCO 2 #####   Morocco         NaN       NaN        NaN
4     title3         AR                                 NaN       NaN         NaN       NaN        NaN
5        NaN        NaN                 ##### ALGERIA #####   Algeria         NaN       NaN        NaN
6     title4         AR                                 NaN       NaN         NaN       NaN        NaN
7     title5         AR                                 NaN       NaN         NaN       NaN        NaN
8     title6         IT                                 NaN       NaN         NaN       NaN        NaN
9     title7         PL                                 NaN       NaN         NaN       1.0        1.0
10    title8         UK                                 NaN       NaN         NaN       NaN        NaN
11    title9         UK                                 NaN       NaN         NaN       NaN        NaN

并且我正在尝试使用以下条件填充"d_header"列中的所有NaN字段:

and I'm trying to fill all NaN fields in the 'd_header' column using the following conditions:

  • 仅应为属于同一组的行设置"d_header"列
  • 该组应由紧靠非Nan'd_header'行之后的行的'd_prefix'列值确定

因此在以下示例中:

  • 0:'d_header'=='#####摩洛哥#####'
  • 1:检查'd_prefix'并将所有行的'd_header'列设置为'##### MOROCCO #####',直到'd_prefix'更改(将值设置为NaN)或新的'd_header'找到(重新开始)
    d_title    d_prefix                            d_header d_country d_subtitles  d_season  d_episode
0        NaN        NaN                 ##### MOROCCO #####   Morocco         NaN       NaN        NaN
1     title1         AR                 ##### MOROCCO #####       NaN         NaN       NaN        NaN
2     title2         AR                 ##### MOROCCO #####       NaN         NaN       NaN        NaN
3        NaN        NaN             ##### MOROCCO TNT #####   Morocco         NaN       NaN        NaN
4     title3         AR             ##### MOROCCO TNT #####       NaN         NaN       NaN        NaN
5        NaN        NaN                 ##### ALGERIA #####   Algeria         NaN       NaN        NaN
6     title4         AR                 ##### ALGERIA #####       NaN         NaN       NaN        NaN
7     title5         AR                 ##### ALGERIA #####       NaN         NaN       NaN        NaN
8     title6         IT                                 NaN       NaN         NaN       NaN        NaN
9     title7         PL                                 NaN       NaN         NaN       1.0        1.0
10    title8         UK                                 NaN       NaN         NaN       NaN        NaN
11    title9         UK                                 NaN       NaN         NaN       NaN        NaN

但是我对这种方法没有任何运气.是否会有更好的方法来达到相同的结果?

but I'm not having any luck with this approach. Would there be a better way to achieve the same result?

推荐答案

  • d_prefix 几乎是您需要的分组密钥. bfill ,然后 groupby()
  • 简化为简单的填充
    • d_prefix is almost the grouping key you need. bfill it then groupby()
    • reduced to simple ffill
    • df = df.assign(d_header=df.assign(t_prefix=df.d_prefix.fillna(method="bfill"))
       .groupby("t_prefix", as_index=False).apply(lambda dfa: dfa.d_header.fillna(method="ffill"))
       .reset_index(drop=True)
      )
      
      

      <身体>
      d_title d_prefix d_header d_country d_subtitles d_season d_episode
      0 nan nan #####摩洛哥##### 摩洛哥 nan nan nan
      1 title1 AR #####摩洛哥##### nan nan nan nan
      2 title2 AR #####摩洛哥##### nan nan nan nan
      3 nan nan #####摩洛哥2 ##### 摩洛哥 nan nan nan
      4 title3 AR #####摩洛哥2 ##### nan nan nan nan
      5 nan nan #####阿尔及利亚##### 阿尔及利亚 nan nan nan
      6 title4 AR #####阿尔及利亚##### nan nan nan nan
      7 title5 AR #####阿尔及利亚##### nan nan nan nan
      8 title6 IT nan nan nan nan nan
      9 title7 PL nan nan nan 1 1
      10 title8 英国 nan nan nan nan nan
      11 title9 英国 nan nan nan nan nan

      这篇关于根据条件的 pandas fillna的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆