gpt4 book ai didi

python - 创建相关的 pandas 系列

转载 作者:行者123 更新时间:2023-12-01 03:10:48 24 4
gpt4 key购买 nike

如果您有一个两列数据框,其中包含一年中两个国家/地区的每日气温,则可以使用 pandas corr 轻松计算这些列的相关性,例如:

Country A   Country B
10 20
11 20
10 22
9 23

df.corr()

有没有办法以某种方式基于具有指定相关性的初始列生成 pandas 系列?换句话说,如果我只有一个国家/地区的温度列表,我想生成与第一个列表具有 0.8 相关性的第二个列表,例如:

Country A   Country B
10
11
10
9

根据国家 A 创建第二个温度列表,相关性为 0.8。也许有某种方法可以使用 numpy 或 python 统计包来做到这一点。

最佳答案

这当然是可能的。 corr 方法默认使用 Pearsons r。您可以将其代入方程的一列,并找到另一列的一些值,从而产生所需的相关性。问题是,解决方案有很多种,但您可能不喜欢您得到的那个。

import pandas as pd
import numpy as np
from scipy.stats import pearsonr
from scipy.optimize import minimize

data = pd.DataFrame({'Country A': [10, 11, 10, 9]})

data['Country B'] = minimize(lambda x: abs(0.8 - pearsonr(data['Country A'], x)[0]),
np.random.rand(len(data['Country A']))).x

我使用scipy.optimize.minimize函数来最小化(0.8 - 相关性)的绝对值。要达到最小值 0,相关性必须等于 0.8。

您描述说您想要生成类似于温度的值。您提供的目标函数也可以更加复杂。假设您想要生成温度,其标准差不大于 5,并且可能仅位于 5 到 25 之间。您可以将后者作为最小化函数的边界。前者你必须在目标函数中考虑。

from random import randint

def fun(x):
if np.std(x) >= 5:
return np.std(x)
return abs(0.8 - pearsonr(data['Country A'], x)[0])

data['Country B'] = minimize(fun, [randint(5, 25) for _ in range(365)],
method = 'SLSQP', bounds = [(5, 25) for _ in range(365)]).x

此方法可确保生成的系列的值遵循一定的分布。

关于python - 创建相关的 pandas 系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42902938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com