如何基于匹配值从另一pandas DataFrame计算新列E/t?
解决方法
方法一:使用map(简洁高效)
先把df_metal转换成材料-弹性模量的映射字典,再通过map将df_comp['Layer']匹配到对应的E值,最后除以厚度即可:
# 构建Material到E的映射字典 e_mapping = df_metal.set_index('Material')['E'].to_dict() # 计算E/t列 df_comp['E/t'] = df_comp['Layer'].map(e_mapping) / df_comp['Thickness']
方法二:使用merge(适合需保留更多关联列的场景)
通过合并两个DataFrame完成匹配,再计算目标列:
# 按Layer和Material匹配合并,保留df_comp所有行 merged = df_comp.merge(df_metal, left_on='Layer', right_on='Material', how='left') # 计算E/t并赋值给原df_comp df_comp['E/t'] = merged['E'] / merged['Thickness']
验证结果
执行上述任意一种方法后,df_comp的结果与预期一致:
Layer Thickness E/t 0 Aluminum 0.050 2400.000000 1 Aluminum 0.063 1904.761905 2 Steel 0.010 25000.000000 3 Titanium 0.028 7214.285714 4 Aluminum 0.050 2400.000000
原代码错误原因
你之前的代码df_metal.loc[df_comp['Layer'] == df_comp['Layer'], 'E']逻辑有误:df_comp['Layer'] == df_comp['Layer']结果全为True,实际是取df_metal的前N行(N等于df_comp的行数),但df_metal只有3行,所以后面的行自然返回NaN,根本没完成材料匹配。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

