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

如何基于列值合并DataFrame行 按公司名聚合填充年度营收数据

问题描述

现有3份分别存储2020、2021、2022年度公司营收数据的独立数据集,直接执行拼接操作后得到的DataFrame存在同一家公司分多行存储、各年度营收列大量空值的问题,拼接后原始数据如下:

company_name  2020 Revenue  2021 Revenue  2022 Revenue
0    company_1          10.0           NaN           NaN
1    company_2          20.0           NaN           NaN
2    company_3          30.0           NaN           NaN
3    company_1           NaN          20.0           NaN
4    company_2           NaN          30.0           NaN
5    company_3           NaN          40.0           NaN
6    company_1           NaN           NaN          50.0
7    company_2           NaN           NaN          60.0
8    company_3           NaN           NaN          70.0
9    company_4           NaN           NaN          80.0

需要保留公司名+各年度营收的原有表结构,删除company_name列的重复行,将同一家公司的各年度营收数据归集到同一行,无营收数据的年度填充为0,期望输出结果如下:

company_name  2020 Revenue  2021 Revenue  2022 Revenue
0    company_1            10            20            50
1    company_2            20            30            60
2    company_3            30            40            70
3    company_4             0             0            80
解决方法

用pandas的分组聚合搭配空值填充即可实现,代码如下:

import pandas as pd

# 按公司名分组,对各营收列聚合取非空值,空值填0后转整数格式
result_df = df.groupby(
    by='company_name', 
    as_index=False
)[['2020 Revenue', '2021 Revenue', '2022 Revenue']].sum()
result_df = result_df.fillna(0).astype(int, errors='ignore')
  • 这里用sum做聚合的原因是:拼接后的原始数据里,同一个公司单年度营收列只会存在一个非空数值,其余均为NaN,sum计算时会自动跳过NaN,刚好可以把分散在不同行的同公司同年度营收值提取出来。如果担心存在异常重复值,把sum替换成max也能实现相同效果。
  • 最后用fillna(0)把没有营收数据的空值替换为0,再转成整数格式就和预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:09:16