如何根据另一列计算不同组之间相同列值的相关性

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

我有一个包含历史股票数据的数据框,如下所示:

股票名称 价格 时间戳
库存_a 35.6 2024-01-01
库存_a 34.7 2024-01-02
库存_b 56.7 2024-01-01
库存_b 55 2024-01-02

我的数据库中有最多 500 只股票,我想计算 stock_a 和所有其他股票(例如 stock_b、股票 c、股票 d...)之间的相关性及其在时间间隔内的价格价值。

我希望得到这样的结果:

Stock_A相关性

股票名称 相关性
库存_b 0.87
库存_c 0.76

现在我只能一一指定除股票以外的每只股票来计算相关性(以 PostgreSQL 为例):

select stock_b, corr(d1.close_price, d2.close_price)
from stock_dmt d1
inner join stock_dmt d2
on d1.time_stamp = d2.time_stamp
where d1.stock_code = 'stock_a' and d2.stock_code = 'stock_b';

但是,对于超过 500 只股票,手动执行此操作是不可能的。

有什么有效的方法来完成这个任务吗?欢迎使用 SQL 或 Python 脚本。

谢谢你

sql dataframe correlation
1个回答
0
投票

我正在尝试用 python 来做。我希望这种方式能够满足您的问题。

import pandas as pd

# Creating a sample data
data = {
    "stock_name": ["stock_a", "stock_a", "stock_b", "stock_b"],
    "price": [35.6, 34.7, 56.7,55],
    "time_stamp": ["2024-01-01", "2024-01-02", "2024-01-01", "2024-01-02"]
}

# Create the DataFrame from the dictionary
df = pd.DataFrame(data)

# Convert to the pivot table 

df_pivot = df.pivot(index = 'time_stamp',columns=["stock_name"], values="price").reset_index()

# If you can drop the column timestamp 
df_pivot.drop(['time_stamp'], axis = 1).corr()
© www.soinside.com 2019 - 2024. All rights reserved.