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

如何基于共同Category将df2的Value retained与df1的Price相乘并新增列至df1

问题:根据Category匹配计算并添加新列至DataFrame

我有两个DataFrame:

import pandas as pd

data1 = {'Item': ['A', 'B', 'C', 'N'], 'Price': [1, 2, 3, 10], 'Category': ['X', 'Y', 'X', 'Z'], 'County': ['K', 'L', 'L', 'K']}
df1 = pd.DataFrame(data1)

data2 = {'Category': ['X', 'Y', 'Z'], 'Value retained': [0.1, 0.2, 0.8]}
df2 = pd.DataFrame(data2)

需求: 根据对应的Category将'Value retained'与'Price'相乘,并将结果作为新列添加至df1中。

我尝试过以下方法,但都没达到预期:

第一种尝试:

df3 = df1
for cat, VR in df2['Category', 'Value retained']:
    if cat in df1.columns:
        df3[cat] = df1['Price'] * VR

第二种尝试:

df3 = df1['Price'] * df2.set_index('Category')['Value retained']
df3

注:我的真实数据包含25万+条记录、32个不同的Category,每个Category对应不同的'Value retained'值。


解决方案

针对大数据量场景,推荐以下两种高效的向量化方法,避免Python循环的性能损耗:

方法1:通过merge关联后计算

逻辑直观,适合需要保留Value retained列的场景:

# 按Category合并两个DataFrame,保留df1所有行
merged_df = df1.merge(df2, on='Category', how='left')
# 计算新列
merged_df['Calculated Value'] = merged_df['Price'] * merged_df['Value retained']

# 可选:若不需要保留'Value retained'列,可删除
# merged_df = merged_df.drop('Value retained', axis=1)

方法2:使用map匹配取值(性能更优)

将df2转为字典,利用map快速匹配Category对应的取值,计算效率更高:

# 转换为Category到Value retained的映射字典
vr_map = df2.set_index('Category')['Value retained'].to_dict()
# 匹配并计算新列
df1['Calculated Value'] = df1['Price'] * df1['Category'].map(vr_map)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:50:23