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

Python pandas不同大小DataFrame按行业分组聚合实现方法

实现方案

核心逻辑:先将宽格式存储的股价表转换为「年份-公司-股价」的长表结构,关联公司对应的行业属性后,按年份+行业维度分组求和,最后转换回以年份为行、行业为列的目标宽表结构即可。


步骤1:导入依赖、构造示例测试数据

和描述的样例数据结构完全对齐,可直接替换为本地的真实DataFrame:

import pandas as pd

# 股票历史价格数据集(宽表:每列对应一家公司股价)
price_df = pd.DataFrame({
    'year': [1980, 1981],
    'Company1': [4.66, 5.68],
    'Company2': [12.32, 15.53]
})

# 公司属性映射数据集
company_info_df = pd.DataFrame({
    '公司名称': ['Company1', 'Company2', 'Company3'],
    '所属行业': ['industrials', 'consumer goods', 'industrials'],
    '所属国家': ['Germany', 'US', 'France']
})

步骤2:宽表转长表,关联公司行业属性

将每家公司单独成列的股价数据转换为行记录,匹配对应公司的行业标签:

# 宽表转长表,每一行对应单一年份单家公司的股价
price_long = price_df.melt(
    id_vars='year',
    var_name='公司名称',
    value_name='股价'
)

# 关联行业信息,仅保留存在股价记录的公司
merged_df = price_long.merge(
    company_info_df[['公司名称', '所属行业']],
    on='公司名称',
    how='left'
)

# 可选:过滤掉属性表中无匹配行业的无效公司记录
merged_df = merged_df.dropna(subset=['所属行业'])

步骤3:分组聚合后转回目标宽表

按年份和行业分组求和,再转换为行是年份、列是行业的结构,同时补全无对应公司的行业列(比如示例中的healthcare):

# 按年份+行业分组,计算对应行业年度股价总和
industry_agg = merged_df.groupby(['year', '所属行业'], as_index=False)['股价'].sum()

# 透视转换为目标宽表格式
result_df = industry_agg.pivot(
    index='year',
    columns='所属行业',
    values='股价'
).reset_index().fillna(0)

# 补全需要展示但当前无数据的行业列,固定输出列顺序
target_columns = ['year', 'industrials', 'consumer goods', 'healthcare']
for col in target_columns:
    if col not in result_df.columns:
        result_df[col] = 0
result_df = result_df[target_columns]

注意事项

  • 最终输出result_df的结构和目标格式完全一致:行维度为年份,列维度为各行业分类,单元格为对应年份该行业所有纳入统计公司的股价总价值
  • 如果后续新增行业分类,只需要修改target_columns列表,新增对应行业名即可自动补全列,无数据的年份默认填充0
  • 属性表中存在、但股价表无交易记录的公司会被自动过滤,不会计入行业总和

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:30:47