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

求助:匹配Line Item替换DataFrame中Creative Size列值

解决DataFrame按匹配项替换列值的问题

我来帮你搞定这个问题~你之前的代码没生效是有原因的,先给你分析下,再给你几个靠谱的实现方法:

为什么你的原代码不生效?

你写的这段代码:

rename_dict = df1.set_index('Line Item').to_dict()['Size']
db['Creative Size'] = db['Creative Size'].replace(rename_dict)

这里的replace是拿Creative Size列里的值去匹配字典的键,但你的Creative Size里是Unknown,而字典的键是BB、CC这些Line Item的值,两者完全不匹配,自然没法替换啦!

正确的实现方法

方法1:用map + fillna(最简洁)

这个方法直接通过Line Item匹配对应Size,没匹配到的保留原数值:

# 先把df1转换成Line Item到Size的映射字典
size_mapping = df1.set_index('Line Item')['Size'].to_dict()
# 用Line Item去查字典,查不到的用原来的Creative Size填充
db['Creative Size'] = db['Line Item'].map(size_mapping).fillna(db['Creative Size'])

这样处理后,AA因为不在字典里,会保留原来的Size1;BB和CC能查到对应的值,就会替换成Size2和Size3,完全符合你的预期。

方法2:用merge合并后处理

如果需要更直观的操作,可以先合并两个DataFrame,再选择对应的值:

# 按Line Item左合并,保留db的所有行
merged_df = db.merge(df1, on='Line Item', how='left')
# 优先用df1的Size值,没有的话保留原Creative Size
db['Creative Size'] = merged_df['Size'].fillna(merged_df['Creative Size'])
# 删掉合并后多余的Size列(可选)
db = db.drop(columns=['Size'])

方法3:用loc条件赋值

如果你想精准定位需要替换的行,可以用条件筛选后直接赋值:

size_mapping = df1.set_index('Line Item')['Size'].to_dict()
# 筛选出Line Item在df1里的行
mask = db['Line Item'].isin(df1['Line Item'])
# 对这些行的Creative Size进行替换
db.loc[mask, 'Creative Size'] = db.loc[mask, 'Line Item'].map(size_mapping)

内容的提问来源于stack exchange,提问作者coelidonum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:47:40