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

如何在多级列DataFrame中添加计算列(Sales=Qty*Price)

多级列DataFrame批量添加按年份计算的Sales列

问题说明

我有一个两级列索引的DataFrame,第一层列名为Qty、Price,第二层为年份(2001-2005),数据结构如下:

import pandas as pd

data = {('Qty', 2001): [50, 50], ('Qty', 2002): [100, 10], ('Qty', 2003): [200, 20], ('Qty', 2004): [300, 30], ('Qty', 2005): [400, 40], 
        ('Price', 2001): [20, 11], ('Price', 2002): [21, 12], ('Price', 2003): [22, 13], ('Price', 2004): [23, 14], ('Price', 2005): [24, 15]}
df = pd.DataFrame(data)

需要为每个年份批量添加Sales列,值为对应年份的Qty乘以Price,不想拆分每个年份单独处理,求简便方法。预期结果是每个年份下都包含Qty、Price、Sales三列。


解决方案

方法1:按年份列分组计算

利用groupby按第二层列(年份)分组,对每组内的Qty和Price做乘法,再将结果转为多级列合并回原DataFrame:

# 按年份分组计算Sales
sales = df.groupby(level=1, axis=1).apply(lambda x: x['Qty'] * x['Price'])
# 设置多级列名
sales.columns = pd.MultiIndex.from_tuples([('Sales', year) for year in sales.columns])
# 合并并按年份排序列
df = pd.concat([df, sales], axis=1).sort_index(axis=1, level=1)

方法2:利用多级列索引对齐直接相乘

提取Qty和Price的子DataFrame,直接相乘后转为多级列,这种方法更高效:

# 提取Qty和Price列并按年份相乘
sales = df.xs('Qty', level=0, axis=1) * df.xs('Price', level=0, axis=1)
# 转换为多级列结构
sales = sales.set_axis(pd.MultiIndex.from_product([['Sales'], sales.columns]), axis=1)
# 合并到原DataFrame并排序列
df = pd.concat([df, sales], axis=1).sort_index(axis=1, level=1)

两种方法都能批量完成所有年份的Sales计算,无需逐个拆分处理。执行后,DataFrame的列会按年份分组,每个年份下包含Qty、Price、Sales三列,符合预期输出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:35:39