根据条件的 pandas fillna [英] Pandas fillna based on a condition
本文介绍了根据条件的 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 thengroupby()
- 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屋!
查看全文