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

如何基于Category列实现两个DataFrame指定列的乘法运算

需求与解决方案

需求说明

我有两个DataFrame:

  • 第一个DataFrame的列:
    ['Srno', 'Category', 'Category%', 'Total', 'X1', 'X2', 'X3', 'X4', 'X5', 'Extra']
    
  • 第二个DataFrame的列:
    ['Srno', 'Category', 'TotalCount']
    

需要基于Category列匹配,把第一个DataFrame中的['X1', 'X2', 'X3', 'X4', 'X5', 'Extra']列的值,分别和第二个DataFrame中对应Category的TotalCount值相乘,并用计算结果替换第一个DataFrame中这些列的原始值。


尝试的代码

df.columns = ['Srno', 'Category', 'Category%', 'Total', 'X1', 'X2', 'X3', 'X4', 'X5', 'Extra']

df2.columns = ['Srno', 'Category', 'TotalCount']

for j, k in zip(df2['Totalcount'], df.iloc[:, 4:9]):
    x = j * k
    print(x)

问题分析与正确实现

原代码的问题

  1. 拼写错误:df2['Totalcount']应该是df2['TotalCount'](大小写不一致)
  2. 列索引错误:df.iloc[:,4:9]只取到X5,漏掉了Extra列
  3. 核心逻辑错误:循环没有基于Category匹配,只是简单按位置zip,会导致对应关系混乱

方法一:合并DataFrame后批量计算

先按Category合并两个DataFrame,再对目标列进行乘法操作:

# 按Category合并,保留第一个DF的所有行
merged_df = df.merge(df2[['Category', 'TotalCount']], on='Category', how='left')

# 指定需要计算的列
target_cols = ['X1', 'X2', 'X3', 'X4', 'X5', 'Extra']

# 批量相乘替换
df[target_cols] = df[target_cols].mul(merged_df['TotalCount'], axis=0)

方法二:用map匹配对应值(更高效)

不需要合并,直接通过Category映射获取TotalCount,再广播相乘:

# 构建Category到TotalCount的映射字典
count_map = df2.set_index('Category')['TotalCount'].to_dict()

# 获取每个行对应的TotalCount值
df['TotalCount'] = df['Category'].map(count_map)

# 批量计算替换
target_cols = ['X1', 'X2', 'X3', 'X4', 'X5', 'Extra']
df[target_cols] = df[target_cols] * df['TotalCount']

# 可选:删除临时的TotalCount列
df.drop('TotalCount', axis=1, inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:30:12