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

Pandas如何合并交替日期的两个序列生成分组日期范围DataFrame

Pandas交替周期序列聚合方案

两个序列的周期是交替衔接的,不需要写复杂的匹配逻辑,只要把所有节点按日期排序后,用错位计算就能直接得到结果,实现步骤如下:

基础三列输出版本

  1. 先把两个Series分别标记周期类型,合并后按日期升序排列
import pandas as pd

# 替换成你实际的两个Series即可
s_period1 = pd.Series(
    [310.62, 300.05, 322.64, 326.54],
    index=pd.to_datetime(["2020-06-22", "2020-06-26", "2020-09-23", "2020-10-30"]),
    name="val"
)
s_period2 = pd.Series(
    [312.05, 357.70, 352.43, 384.39],
    index=pd.to_datetime(["2020-06-23", "2020-09-02", "2020-10-12", "2021-01-25"]),
    name="val"
)

# 标记周期类型后合并排序
df1 = s_period1.reset_index().rename(columns={"index":"DATE"})
df1["PERIOD"] = 1
df2 = s_period2.reset_index().rename(columns={"index":"DATE"})
df2["PERIOD"] = 2
df = pd.concat([df1, df2]).sort_values("DATE", ignore_index=True)
  1. 错位计算变动量,上一行的数值就是当前周期的起始值
# 如果要和示例里的正数值完全一致,把下面的表达式套一层abs()即可
df["CHG"] = (df["val"] - df["val"].shift(1)).round(2)
# 取需要的列得到最终结果
result_basic = df[["DATE", "CHG", "PERIOD"]]

运行后得到的结果和给出的示例结构完全一致,仅下跌周期的CHG会显示为负值,属于正确计算结果;如果只需要展示变动幅度,计算时加abs()就能得到示例里的正数值。

进阶带日期范围版本

如果需要每个周期的明确起止日期,只要把上一行的日期作为当前周期的起始日期即可:

df["START_DATE"] = df["DATE"].shift(1)
df["END_DATE"] = df["DATE"]
df["START_VAL"] = df["val"].shift(1)
df["END_VAL"] = df["val"]
result_with_range = df[["START_DATE", "END_DATE", "START_VAL", "END_VAL", "CHG", "PERIOD"]]

这个结果可以直接按周期做分组统计,不需要额外做日期区间匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:48:18