如何用DataFrame2/3替换DataFrame1中From_、To_列的索引引用值?
解决方法
可以通过索引映射实现需求,核心是将DataFrame1中从1开始的索引转换为pandas默认的0起始索引,再匹配对应DataFrame的Name列值。
步骤说明
From_列:将列中数值减1,作为DataFrame3的行索引,提取对应Name值替换原数值,保留NaNTo_列:将列中数值减1,作为DataFrame2的行索引,提取对应Name值替换原数值,保留None
完整代码实现
import pandas as pd # 构造初始DataFrame df1 = pd.DataFrame({ 'S': ['x']*11, 'From_': [None, None, None, 1.0, 1.0, None, None, None, None, None, 1.0], 'To_': [None, None, None, 2, 5, None, None, None, None, None, None] }) df2 = pd.DataFrame({ 'A': [None]*5, 'Name': ['Name1', 'Name2', 'Name3', 'Name4', 'Name5'] }) df3 = pd.DataFrame({ 'A': [None]*4, 'Name': ['Name6', 'Name7', 'Name9', 'Name10'] }) # 处理From_列:转换索引并映射 df1['From_'] = df1['From_'].apply( lambda x: df3.loc[int(x)-1, 'Name'] if pd.notna(x) else x ) # 处理To_列:转换索引并映射 df1['To_'] = df1['To_'].apply( lambda x: df2.loc[int(x)-1, 'Name'] if pd.notna(x) else x ) print(df1)
输出结果
S From_ To_ 0 x NaN None 1 x NaN None 2 x NaN None 3 x Name6 Name2 4 x Name6 Name5 5 x NaN None 6 x NaN None 7 x NaN None 8 x NaN None 9 x NaN None 10 x Name6 NaN
内容的提问来源于stack exchange,提问作者Rycliff
相关产品推荐
相关产品推荐

