如何在DataFrame中通过方法链实现ffill(axis=1)填充列值
方法链实现DataFrame中b列缺失值用a列填充
这里提供几种符合方法链风格的实现方式,都能达到你要的效果:
方法1:使用assign() + fillna()
这是最直观的写法,直接在方法链中对b列进行缺失值填充:
import numpy as np import pandas as pd df = pd.DataFrame( {"a": [1, 2, 3, 4], "b": [10, np.nan, np.nan, 40], "c": ["a", "b", "c", "d"]} ) # 方法链形式实现填充 result = df.assign(b=lambda x: x['b'].fillna(x['a'])) print(result.to_markdown())
方法2:使用assign() + combine_first()
combine_first()会用传入的Series/DF填充当前列的缺失值,逻辑和需求完全匹配:
result = df.assign(b=lambda x: x['b'].combine_first(x['a']))
方法3:和原逻辑对齐的方法链写法
如果想保留你原来用ffill(axis=1)的逻辑,同样可以包装成方法链:
result = df.assign(b=lambda x: x[['a', 'b']].ffill(axis=1)['b'])
以上三种方式运行后都会得到相同的结果:
| a | b | c | |
|---|---|---|---|
| 0 | 1 | 10 | a |
| 1 | 2 | 2 | b |
| 2 | 3 | 3 | c |
| 3 | 4 | 40 | d |
内容的提问来源于stack exchange,提问作者divingTobi
相关产品推荐
相关产品推荐

