這當然是可能的。 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
該方法確保生成的系列的值遵循一定的分佈。