如何使用pandas内置功能将DataFrame列值替换为对应索引
实现方案
首先将你现有的nameIndex转换为「地名-索引」的直接映射字典,再用pandas内置的映射方法批量替换列值即可,全程无需循环。
步骤1:构建映射字典
把nameIndex里的name和index一一对应,生成可直接用于查询的映射表:
import pandas as pd # 你的原有代码部分 data = [['Iowa', 'New York', 1], ['New York' ,'San Jose', 1], ['San Jose' ,'Iowa', 1], ['Houston', 'San Jose', 1], ['Houston' ,'Arizona', 1]] dataDf = pd.DataFrame(data, columns = ['Source', 'Target', 'value']) nameIndex = {'name': ['Iowa', 'New York','San Jose', 'Houston','Arizona' ], 'index': [0,1,2,3,4]} # 构建映射字典,加str转换是为了匹配你预期输出的字符串类型索引,不需要可以去掉 name_map = {name: str(idx) for name, idx in zip(nameIndex['name'], nameIndex['index'])}
步骤2:批量替换列值
有两种常用实现方式,任选其一即可:
方式1:用map方法逐列映射
dataDf['Source'] = dataDf['Source'].map(name_map) dataDf['Target'] = dataDf['Target'].map(name_map)
方式2:用replace方法一次性处理多列
dataDf[['Source', 'Target']] = dataDf[['Source', 'Target']].replace(name_map)
运行结果
处理后dataDf的Source和Target列就会和你预期输出完全一致:
| Source | Target | value | |
|---|---|---|---|
| 0 | 0 | 1 | 1 |
| 1 | 1 | 2 | 1 |
| 2 | 2 | 0 | 1 |
| 3 | 3 | 2 | 1 |
| 4 | 3 | 4 | 1 |
内容的提问来源于stack exchange,提问作者CrazyC
相关产品推荐
相关产品推荐

