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

如何计算不同长度多站点同物品时间序列的相关系数

问题描述

现有包含站点(site)、物品(item)、日期(date)、数量(quantity)的DataFrame示例代码如下:

data = {'site': ['A', 'A', 'B', 'B', 'C', 'C'],
        'item': ['x', 'x', 'x', 'x', 'x', 'x'],
         'date': ['2023-03-01', '2023-03-10', '2023-03-20', '2023-03-27', '2023-03-5', '2023-03-12'],
         'quantity': [10,20,30, 20, 30, 50]}
df_sample = pd.DataFrame(data=data)
df_sample.head()

需求是计算同一物品x下,站点A和站点B的quantity时间序列相关系数,但两者的时间序列长度不一样。目前已经拆分出两个子DataFrame:

df1 = df_sample[(df_sample['site'] == 'A') & (df_sample['item'] == 'x')]
df2 = df_sample[(df_sample['site'] == 'B') & (df_sample['item'] == 'x')]

之后强行对齐长度来计算相关系数,现在想找更合理的解决办法。

更优解决方案

1. 先规整日期格式

首先得把日期列转成标准的datetime类型,不然像示例里2023-03-5这种不规范格式会影响后续对齐,同时筛选出需要的物品x和站点A、B的数据:

import pandas as pd

# 转换日期为标准格式
df_sample['date'] = pd.to_datetime(df_sample['date'])

# 筛选目标数据
target_df = df_sample[(df_sample['item'] == 'x') & (df_sample['site'].isin(['A', 'B']))]

2. 用透视表自动对齐时间序列

用透视表把站点A、B的quantity按日期列对齐,缺失的日期会自动补NaN,不用手动去凑长度:

aligned_df = target_df.pivot(index='date', columns='site', values='quantity')

3. 直接计算相关系数

用pandas自带的corr()方法就能直接算,默认会自动排除两个站点都没数据的行(只保留双方都有记录的日期来计算):

corr_value = aligned_df['A'].corr(aligned_df['B'])
print(f"站点A和B的quantity相关系数:{corr_value}")

可选:填充缺失值再计算(如果需要完整时间序列)

要是不想丢弃缺失日期的记录,可以先填充NaN值(比如前向填充、后向填充或者均值填充),再算相关系数:

# 前向填充缺失值(用前一个日期的数值填充)
filled_df = aligned_df.fillna(method='ffill')
# 计算填充后的相关系数
filled_corr = filled_df['A'].corr(filled_df['B'])
print(f"填充缺失值后的相关系数:{filled_corr}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:41:11