如何用NumPy数组填充Pandas DataFrame列
将数组指标映射到Pandas DataFrame列
问题说明
我有一个Pandas DataFrame,其中一列名为dist。针对每个dist的唯一值(对应数组a),计算得到的指标存储在数组b中。需要把这些b值匹配到原DataFrame的每一行,生成包含新列b的目标结果。
示例数据
import pandas as pd import numpy as np df = pd.DataFrame(np.array([[1, 2, 3,4,5], [4,4,4,4,4], [1,2,3,3,1]]), columns=['Id', 'size', 'dist']) a = np.array([1,2,3]) # dist列的唯一值集合 b = np.array([10,9,8]) # 对应每个唯一值的指标值
目标结果
df = pd.DataFrame(np.array([[1, 2, 3,4,5], [4,4,4,4,4], [1,2,3,3,1],[10,9,8,8,10]]), columns=['Id', 'size', 'dist','b'])
实现方法
方法1:用map快速映射(推荐)
先把a和b转成键值对字典,再通过map函数将dist列的值对应到b的指标:
# 构建映射字典 dist_to_b = dict(zip(a, b)) # 添加新列 df['b'] = df['dist'].map(dist_to_b)
方法2:用replace直接替换
原理和map一致,直接通过replace函数完成值的替换并生成新列:
df['b'] = df['dist'].replace(dict(zip(a, b)))
方法3:用merge合并(适合复杂关联场景)
如果需要更灵活的匹配逻辑,可以先把a和b转成临时DataFrame,再和原表做左连接:
# 创建临时映射表 map_table = pd.DataFrame({'dist': a, 'b': b}) # 左连接保证原表所有行保留 df = df.merge(map_table, on='dist', how='left')
运行任意一种方法后,都能得到符合要求的目标DataFrame。
内容的提问来源于stack exchange,提问作者mamici24
相关产品推荐
相关产品推荐

