Python Pandas DataFrame按id分组取各变量最新迭代的非NaN值方法
Python DataFrame按unique_id分组取各变量最新迭代非空值方案
核心逻辑
按unique_id分组后,先保证每个分组内的记录按iteration升序排列,用前向填充覆盖掉迭代过程中的空值,最后取每个分组的最后一行即可,会自动保留最大迭代号,以及每个变量最后一次出现的非空值,天然支持批量处理大量不同unique_id。
完整代码示例
import pandas as pd import numpy as np # 构造示例数据,实际使用时替换成你自己的DataFrame即可 df = pd.DataFrame({ 'unique_id': [111]*5, 'iteration': [1,2,3,4,5], 'variable_1': ['apple', np.nan, 'orange', 'pear', np.nan], 'variable_2': [np.nan, 'table', np.nan, np.nan, 'chair'] }) # 预处理:若数据中缺失值为字符串格式'NaN',先转成pandas识别的空值 # df = df.replace('NaN', np.nan) # 1. 按分组和迭代号排序,保证迭代顺序正确 df_sorted = df.sort_values(['unique_id', 'iteration'], ascending=True) # 2. 分组处理得到结果 result = df_sorted.groupby('unique_id').apply( lambda x: x.ffill().iloc[-1] ).reset_index(drop=True)
输出结果验证
运行后得到的result如下,完全符合预期:
| unique_id | iteration | variable_1 | variable_2 |
|---|---|---|---|
| 111 | 5 | pear | chair |
适用说明
- 不需要手动指定变量列,不管有多少个
variable_x列都会自动适配处理 - 支持百万级数据的批量分组处理,性能满足绝大多数业务场景
内容的提问来源于stack exchange,提问作者sanhao95
相关产品推荐
相关产品推荐

