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

使用Python Pandas根据价格和数量计算营收并添加至DataFrame

解决方案:按日期门店计算营收并追加到DataFrame

这问题我熟,咱们可以用Pandas的重塑+合并功能轻松搞定,下面是具体步骤和代码:

1. 先构造示例数据(方便你测试)

首先先把你给出的DataFrame用代码复现出来:

import pandas as pd

data = {
    'date': ['2013-06-20', '2013-06-20', '2013-06-21', '2013-06-21',
             '2013-06-20', '2013-06-20', '2013-06-21', '2013-06-21'],
    'store': [1, 2, 1, 2, 1, 2, 1, 2],
    'property_name': ['price', 'price', 'price', 'price',
                      'quantity', 'quantity', 'quantity', 'quantity'],
    'property_value': [101, 201, 301, 401, 1000, 2000, 3000, 4000]
}
df = pd.DataFrame(data)

2. 方法一:先转宽格式计算,再转回长格式合并

这种方法逻辑清晰,适合数据规整的场景:

# 第一步:把长格式数据转成宽格式,让同一日期+门店的price和quantity在同一行
wide_df = df.pivot(index=['date', 'store'], columns='property_name', values='property_value').reset_index()

# 第二步:计算营收(price * quantity)
wide_df['revenue'] = wide_df['price'] * wide_df['quantity']

# 第三步:把营收数据转回长格式,匹配原DataFrame的结构
revenue_df = wide_df.melt(
    id_vars=['date', 'store'],
    value_vars=['revenue'],
    var_name='property_name',
    value_name='property_value'
)

# 第四步:合并原数据和营收数据,重置索引
final_df = pd.concat([df, revenue_df], ignore_index=True)

运行后final_df的结果就是你要的:

date  store property_name  property_value
0  2013-06-20      1          price             101
1  2013-06-20      2          price             201
2  2013-06-21      1          price             301
3  2013-06-21      2          price             401
4  2013-06-20      1       quantity            1000
5  2013-06-20      2       quantity            2000
6  2013-06-21      1       quantity            3000
7  2013-06-21      2       quantity            4000
8  2013-06-20      1        revenue           101000
9  2013-06-20      2        revenue           402000
10 2013-06-21      1        revenue           903000
11 2013-06-21      2        revenue          1604000

3. 方法二:直接用GroupBy计算

如果不想转格式,也可以直接按date和store分组,每组内取出price和quantity的值相乘:

# 按日期和门店分组,计算每组的营收
revenue_df = df.groupby(['date', 'store']).apply(
    lambda x: pd.Series({
        'property_name': 'revenue',
        'property_value': x[x['property_name'] == 'price']['property_value'].iloc[0] * x[x['property_name'] == 'quantity']['property_value'].iloc[0]
    })
).reset_index()

# 合并数据
final_df = pd.concat([df, revenue_df], ignore_index=True)

这种方法不需要做格式转换,适合你不确定数据是否有其他属性的场景,但要确保每组里price和quantity各有且仅有一条数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:35:36