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

如何用pandas将dataframe表头合约分组后按日计算各组成交量总和

实现方案

核心思路是将分组规则和业务代码分离,分组配置放在独立的外部文件维护,不需要修改代码即可更新规则,具体实现步骤如下:

1. 整理外部分组配置文件

你已经用Excel整理了分组规则,直接将其导出为contract_groups.csv即可,配置表只需要保留2列:

  • 第一列:分组名称(比如「近月持仓量」「远月持仓量」)
  • 第二列:对应合约名称(和你的DataFrame列名完全一致,大小写、空格、字符都不能有差异)

配置表示例:

分组名称,合约名称
近月持仓量,March 2022 Contract
近月持仓量,Sep 2021 Contract
近月持仓量,Dec Contract 2021
远月持仓量,June 2021 Contract
远月持仓量,March 2021 Contract
全部合约总成交量,March 2022 Contract
全部合约总成交量,Sep 2021 Contract
...

后续调整分组规则时,直接修改这个CSV文件即可,比如新增分组、给分组增删合约都不需要动代码。

2. 代码读取配置并自动计算分组总和

示例代码如下(基于Python Pandas实现):

import pandas as pd

# 1. 读取分组配置,转换为「分组名: 对应合约列表」的字典
group_config = pd.read_csv("contract_groups.csv")
group_map = group_config.groupby("分组名称")["合约名称"].apply(list).to_dict()

# 2. 读取每日成交量数据源
daily_data = pd.read_csv("你的每日成交量数据.csv", parse_dates=["日期"], index_col="日期")

# 3. 批量计算所有分组的每日成交量总和
group_result = pd.DataFrame()
for group_name, contract_list in group_map.items():
    # 可选校验:提示配置中不存在的合约,方便排查错误
    invalid_contracts = [c for c in contract_list if c not in daily_data.columns]
    if invalid_contracts:
        print(f"分组【{group_name}】存在未匹配的合约:{invalid_contracts}")
    # 计算分组总和
    group_result[group_name] = daily_data[contract_list].sum(axis=1)

# 输出结果,可直接保存为csv或者后续分析使用
print(group_result)

方案优势

  • 配置独立维护,每季度调整分组规则时,仅需要修改配置文件即可,完全不需要触碰业务代码
  • 支持任意数量的分组,单个分组的合约数量没有上限,哪怕超过90个也可以正常运行
  • 自带校验逻辑,避免配置写错合约名导致计算错误的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:45:02