计算不等长时间序列数据的相关系数

问题描述 投票:0回答:1

假设你有一个像这样的数据框

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 之间的相关性及其相关数量。尽管如此,它们在数据帧中的长度可能不同。你会怎样做呢?

这里考虑的实际数据可以在这里这里找到。

现在,我尝试的只是设置两个不同的数据框,如下所示

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

然后强制它们具有相同的大小,并从那里计算相关系数,但我确信有更好的方法来做到这一点。

python pandas statistics
1个回答
0
投票

您可以通过过滤每个站点的条目将日期设置为索引,然后查找 a=共同日期来对齐数据

例如:

import pandas as pd

# Create the 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-05', '2023-03-12'],
        'quantity': [10, 20, 30, 20, 30, 50]}
df_sample = pd.DataFrame(data)
df_sample['date'] = pd.to_datetime(df_sample['date'])

# Filter data for sites A and B for item x
df_a = df_sample[(df_sample['site'] == 'A') & (df_sample['item'] == 'x')].set_index('date')['quantity']
df_b = df_sample[(df_sample['site'] == 'B') & (df_sample['item'] == 'x')].set_index('date')['quantity']

# Align data by common dates only
common_dates = df_a.index.intersection(df_b.index)
df_a = df_a.loc[common_dates]
df_b = df_b.loc[common_dates]

# Combine and calculate correlation
df_combined = pd.DataFrame({'A': df_a, 'B': df_b})
if len(df_combined) < 2:
    print("Not enough overlapping data for correlation calculation.")
else:
    correlation = df_combined.corr().loc['A', 'B']
    print("Correlation coefficient between site A and site B:", correlation)

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.