Python 这是基于一个条件的

Python 这是基于一个条件的,python,pandas,dataframe,conditional-statements,nan,Python,Pandas,Dataframe,Conditional Statements,Nan,我对pandas还是新手,但我有一个以下格式的数据帧: d_title d_prefix d_header d_country d_subtitles d_season d_episode 0 NaN NaN ##### MOROCCO ##### Morocco NaN NaN NaN 1 title1

我对pandas还是新手,但我有一个以下格式的数据帧:

    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字段:

  • 仅应为属于同一组的行设置“d_header”列
  • 组应由紧跟在非Nan“d_头”行之后的行的“d_前缀”列值确定
在下面的例子中:

  • 0:‘d#U头球’='#摩洛哥###########
  • 1:检查'd#u prefix'并设置'd#u header'列,直到'd#u prefix'已更改(将值设置为NaN)或找到新的'd#u header'(重新开始)
但我对这种方法一点运气都没有。有没有更好的方法达到同样的效果?

  • d_prefix几乎就是您需要的分组键
    b填充
    it然后
    groupby()
  • 简化为简单的
    ffill
d_头衔 d_前缀 d_头 杜邦 d_字幕 迪乌季节 d_集 0 楠 楠 #####摩洛哥##### 摩洛哥 楠 楠 楠 1. 标题1 应收账 #####摩洛哥##### 楠 楠 楠 楠 2. 标题2 应收账 #####摩洛哥##### 楠 楠 楠 楠 3. 楠 楠 #####摩洛哥2##### 摩洛哥 楠 楠 楠 4. 标题3 应收账 #####摩洛哥2##### 楠 楠 楠 楠 5. 楠 楠 #####阿尔及利亚##### 阿尔及利亚 楠 楠 楠 6. 标题4 应收账 #####阿尔及利亚##### 楠 楠 楠 楠 7. 标题5 应收账 #####阿尔及利亚##### 楠 楠 楠 楠 8. 标题6 信息技术 楠 楠 楠 楠 楠 9 标题7 PL 楠 楠 楠 1. 1. 10 标题8 英国 楠 楠 楠 楠 楠 11 标题9 英国 楠 楠 楠 楠 楠
这可能是重复的。看,这正是我要找的。谢谢你,罗布
    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
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)
)