You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于匹配值从另一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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 03:43:19