如何将第二表中的名称替换为第一表对应名称的数值均值?
别担心,我来一步步帮你搞定这个需求!下面我会分享两种最常用的实现方法,你可以根据自己熟悉的工具来选:
这个方法适合习惯用办公软件的场景,操作很直观:
计算第一张表的均值
假设第一张表的结构是:A列是ID,B、C、D列分别是number_1、number_2、number_3。我们在E列新增一个“均值”列,在E2单元格输入公式:=AVERAGE(B2:D2)输入完成后按回车,然后鼠标拖动E2单元格的右下角填充柄,下拉到所有数据行,这样每个ID对应的均值就计算好了。
替换第二张表的ID为均值
假设第二张表中需要替换的ID在G列(对应示例里的v3),我们可以用VLOOKUP函数来匹配:
在H2单元格输入公式(注意把Sheet1换成你第一张表的实际工作表名称,$A$2:$E$100换成包含所有ID和均值的区域,用绝对引用避免下拉时区域偏移):=VLOOKUP(G2, Sheet1!$A$2:$E$100, 5, FALSE)- 这里的
5是均值所在的列数(因为我们把均值放在了第5列) FALSE表示精确匹配,确保只有完全一致的ID才会被替换
同样下拉填充所有行后,你可以把H列的数值复制,粘贴成“值”到原来的G列,完成替换。
- 这里的
如果数据量比较大,用代码处理更高效,步骤如下:
导入库并读取数据
先导入Pandas,然后读取你的两张数据表(支持csv、excel等格式,这里以csv为例):import pandas as pd # 读取第一张表 df1 = pd.read_csv("第一张表.csv") # 读取第二张表 df2 = pd.read_csv("第二张表.csv")计算每个ID的均值
给第一张表新增一列mean_value,按行计算三个数值列的均值:df1['mean_value'] = df1[['number_1', 'number_2', 'number_3']].mean(axis=1)axis=1表示按行计算,对应每个ID的三个数值求平均
替换第二张表的ID为均值
这里有两种常用方式:方式一:用字典映射(简单高效)
先把第一张表的ID和均值转换成字典,再用map方法替换:# 生成ID-均值的字典 id_mean_map = df1.set_index('ID')['mean_value'].to_dict() # 替换第二张表的v3列 df2['v3'] = df2['v3'].map(id_mean_map)如果有ID不在第一张表中,
map会把它变成NaN,你可以用fillna保留原ID:df2['v3'] = df2['v3'].map(id_mean_map).fillna(df2['v3'])方式二:用表合并(更稳妥,适合需要处理缺失值的场景)
通过合并两张表来匹配均值,再替换原列:# 按ID合并两张表,只保留需要的均值列 df2 = df2.merge(df1[['ID', 'mean_value']], left_on='v3', right_on='ID', how='left') # 替换v3列为均值,删除多余的列 df2['v3'] = df2['mean_value'] df2.drop(columns=['ID', 'mean_value'], inplace=True)
保存结果
最后把处理好的第二张表保存成文件:df2.to_csv("替换后的第二张表.csv", index=False)
内容的提问来源于stack exchange,提问作者Z. Y. Jeng

