如何基于列值合并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
相关产品推荐
相关产品推荐

