Python:如何计算DataFrame中不同公司的年度营收同比差值
Python 多公司营收DataFrame计算年度同比差值方案
核心逻辑为按公司维度分组隔离数据,组内按年度排序后对营收值做差分计算,不会出现不同公司数据混算的问题,适配多公司、多科目的大型DataFrame场景。
完整实现代码
1. 依赖导入与数据准备(示例数据可替换为你自己的数据源读取逻辑)
import pandas as pd # 构造示例数据,包含2家公司的营收数据,验证多公司适配效果 data = { 'Company': ['A2M']*5 + ['BXX']*4, 'Acc_Name': ['Sales/Revenue']*9, 'Date': [2016,2017,2018,2019,2020,2018,2019,2020,2021], 'Value': [167770000.0, 360842000.0, 68087000.0, 963000000.0, 143346000.0, 100000000, 120000000, 150000000, 195000000] } df = pd.DataFrame(data)
2. 核心计算逻辑
# 确保日期列为整数类型,避免字符串排序出现逻辑错误 df['Date'] = df['Date'].astype(int) # 先按公司、日期升序排序,解决原数据顺序混乱导致的计算错误问题 df = df.sort_values(by=['Company', 'Date'], ignore_index=True) # 按公司分组,组内计算相邻年度的营收差值,即为年度同比差值 df['YoY_Diff'] = df.groupby('Company')['Value'].diff()
结果说明
- 每个公司的首个统计年度(无上年数据)对应
YoY_Diff列值为NaN,符合业务逻辑 - 以示例中A2M公司2017年数据为例,计算得到的同比差值为
360842000.0 - 167770000.0 = 193072000.0,和预期一致
扩展适配场景
- 若数据包含多个财务科目(不止营收),只需修改分组逻辑为
df.groupby(['Company', 'Acc_Name'])['Value'].diff(),即可实现同公司同科目的同比计算 - 若需要同步计算同比增长率,可补充以下代码:
df['YoY_Rate'] = df.groupby('Company')['Value'].pct_change()
- 若存在年度不连续的场景,不想使用隔年数据计算差值,可将日期转为时间索引后按年度重采样,缺失年份自动填充NaN,再做差分计算即可
内容的提问来源于stack exchange,提问作者Hugoo
相关产品推荐
相关产品推荐

