如何基于Pandas的reset_flag和session_id生成new_name列?
高效生成new_name列的Pandas原生实现
核心思路
利用Pandas分组(groupby)+ 向前填充(ffill)的组合功能实现,全程避免循环迭代,性能远高于iterrows()方案。
代码实现与说明
import pandas as pd # 先统一处理reset_flag的格式(兼容空值/字符串TRUE的情况) df['reset_flag'] = df['reset_flag'].map(lambda x: True if str(x).upper() == 'TRUE' else False) # 生成new_name列 df['new_name'] = df.groupby('session_id')['name'].apply( lambda x: x.where(x.reset_flag).ffill() )
where(x.reset_flag):仅保留reset_flag=True行的name值,其余行转为缺失值(NaN)ffill():在同一session_id分组内,向前填充最近的非缺失值,正好匹配“沿用最近一次重置点名称”的需求
验证结果
处理后的数据将完全符合你给出的预期输出示例:
| session_id | name | reset_flag | new_name |
|---|---|---|---|
| 06c97a-bc7-6cc-29f-65978ee8d | some_name_1 | True | some_name_1 |
| 06c97a-bc7-6cc-29f-65978ee8d | some_name_1 | False | some_name_1 |
| 06c97a-bc7-6cc-29f-65978ee8d | some_name_1 | False | some_name_1 |
| 06c97a-bc7-6cc-29f-65978ee8d | some_name_2 | True | some_name_2 |
| ... | ... | ... | ... |
| 3943d5-e1e-63e-6c4-aa1899bd9 | some_name_6 | False | some_name_5 |
内容的提问来源于stack exchange,提问作者yulGM
相关产品推荐
相关产品推荐

