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

Pandas中如何高效.get多时间序列创建DataFrame避免重复代码?

多时间序列重采样合并的DRY实现方案

你当前逐一定义变量、逐一重采样再拼接的写法,在序列数量增多时会产生大量重复代码,维护时很容易出现参数修改不一致的问题,可通过抽离公共配置+循环批量处理的方式优化。

基础实现(新手友好)

核心思路是把所有固定参数、需要处理的序列标识统一抽离,用列表推导式一次性完成「拉取数据-重采样聚合」的重复操作,最后一次性拼接为DataFrame:

import pandas as pd

# 公共参数统一维护,后续修改仅需调整此处
START_TS = '2022-01-01 12:00:00'
END_TS = '2022-01-01 18:00:00'
RESAMPLE_SETTING = {'rule': '1H', 'label': 'right'}
# 所有需要拉取的测点ID放到列表中,新增/删除序列仅需修改该列表
TAG_LIST = ['tag1', 'tag2'] # 替换为你实际的tagid,注意原示例中两个get的tagid重复,需要区分

# 批量完成拉取+重采样,同时给每个序列设置对应tagid为列名
processed_series = [
    client.get(tag, start=START_TS, end=END_TS)
    .resample(**RESAMPLE_SETTING)
    .mean()
    .rename(tag)
    for tag in TAG_LIST
]

# 拼接为多列DataFrame
df = pd.concat(processed_series, join='outer', axis=1, sort=False)

方案优势

  • 无重复代码,所有公共配置仅需定义一次,不会出现修改时间范围、重采样规则时漏改某一行的问题
  • 扩展性强,后续新增时间序列仅需在TAG_LIST中追加对应id即可,不需要复制粘贴整段逻辑
  • 合并后的DataFrame默认以tagid作为列名,无需额外重命名即可直接区分每列对应的序列

灵活扩展提示

如果存在不同序列需要使用不同聚合规则的场景,可以把配置改为字典结构映射tagid和聚合方法,例如:

# 键为tagid,值为对应的聚合方法
TAG_AGG_MAP = {
    'tag1': 'mean',
    'tag2': 'max',
    'tag3': 'sum'
}

processed_series = [
    client.get(tag, start=START_TS, end=END_TS)
    .resample(**RESAMPLE_SETTING)
    .agg(agg_method)
    .rename(tag)
    for tag, agg_method in TAG_AGG_MAP.items()
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:27:23