如何基于索引匹配将数组元素映射到DataFrame列?
解决DataFrame列值与数组索引匹配替换的问题
你可以通过以下两种简单方法实现需求,核心逻辑是把DataFrame列中的数值作为数组索引,取出对应元素替换,同时处理超出数组索引范围的情况:
方法一:使用map()结合自定义函数
这种方式灵活可控,能直接处理索引越界的情况:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'col1': [4, 3, 5, 3], 'col2': [1, 2, 3, 1] }) arr = ["low", "medium", "neutral", "high", "unknown"] # 定义映射规则:数值在数组索引范围内取对应元素,否则取最后一个元素(unknown) def map_to_arr(x): if 0 <= x < len(arr): return arr[x] return arr[-1] # 对col1和col2分别应用映射 df['col1'] = df['col1'].map(map_to_arr) df['col2'] = df['col2'].map(map_to_arr) # 输出结果 print(df)
运行后会得到期望的结果:
col1 col2 0 unknown low 1 high medium 2 unknown high 3 high low
方法二:用字典映射+replace()
先把数组的索引和元素转换成字典,再通过replace()替换,最后处理越界值:
import pandas as pd df = pd.DataFrame({ 'col1': [4, 3, 5, 3], 'col2': [1, 2, 3, 1] }) arr = ["low", "medium", "neutral", "high", "unknown"] # 生成索引-元素的映射字典 index_map = dict(enumerate(arr)) # 先替换已知索引的数值,再把超出范围的填充为unknown df['col1'] = df['col1'].replace(index_map).fillna(arr[-1]) df['col2'] = df['col2'].replace(index_map).fillna(arr[-1])
这种方法代码更简洁,同样能达到目标效果。
内容的提问来源于stack exchange,提问作者Aditya sharma
相关产品推荐
相关产品推荐

