如何在同一pandas DataFrame中匹配父站点并覆盖子站点的info属性值
实现方案
直接通过构造站点映射+匹配的方式实现,代码简洁高效,天然支持多父站点场景:
import pandas as pd # 初始数据构造 data = [['london_1', 10,'london'], ['london_2', 15,'london'], ['london_3', 14,'london'],['london',49,'']] df = pd.DataFrame(data, columns = ['station', 'info','parent_station']) # 核心逻辑 # 构建所有站点名和对应info的映射 station_info_map = df.set_index('station')['info'].to_dict() # 子站点用父站点的info,无父站点的保留原有info df['info'] = df['parent_station'].map(station_info_map).fillna(df['info']).astype(int) print(df)
输出结果和要求完全一致:
station info parent_station 0 london_1 49 london 1 london_2 49 london 2 london_3 49 london 3 london 49
逻辑说明
- 先把所有站点的名称和对应的info值存为字典,父站点、子站点都会被收录
- 用
map方法将子站点的父站点名称匹配到对应的info值,没有父站点的行匹配结果为NaN - 用
fillna将无父站点的行填充为原来的info值,最后转整型避免浮点数转换问题
内容的提问来源于stack exchange,提问作者obchardon
相关产品推荐
相关产品推荐

