numpy 在Python中将值归因于相关矩阵而不进行迭代

iswrvxsc  于 2023-06-23  发布在  Python
关注(0)|答案(1)|浏览(100)

我有一个贷款表,其特征是 * 国家 * 和 * 部门 *。
| 贷款数量|行业|国家|
| - -----|- -----|- -----|
| 贷款1|食物|德国|
| 贷款2|电信|意大利|
| 贷款3|汽车|日本|
| 贷款4|食物|日本|
| 贷款5|电信|德国|
| 贷款6|汽车|意大利|
我需要使用以下规则定义相关矩阵:

  • 如果两笔贷款具有相同的行业和国家,则它们的相关性为35%
  • 如果两笔贷款有相同的国家,它们的相关性为25%
  • 如果两笔贷款具有相同的部门,则它们的相关性为25%
  • 否则,它们的相关性为5%

| 贷款数量|贷款1|贷款2|贷款3|贷款4|贷款5|贷款6|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|
| 贷款1| 1|- -一种|- -一种|- -一种|- -一种|- -一种|
| 贷款2|零点零五|1|- -一种|- -一种|- -一种|- -一种|
| 贷款3|零点零五|零点零五|1|- -一种|- -一种|- -一种|
| 贷款4|零点二五|零点零五|零点二五|1|- -一种|- -一种|
| 贷款5|零点二五|零点二五|零点零五|零点零五|1|- -一种|
| 贷款6|零点零五|零点二五|零点二五|零点零五|零点零五|1|
我用迭代创造了它有没有更聪明的方法?谢谢

corr = np.zeros((10,10))
for i in range(df.shape[0]):
    for j in range(df.shape[0]):
        if df.loan[i] == df.loan[j]:
            corr[i,j] = 1
        else:
            if (df.sector[i] == df.sector[j]) and (df.country[i] == df.country[j]):
                corr[i,j] = 0.6
            else:
                if (df.sector[i] == df.sector[j]) or (df.country[i] == df.country[j]):
                    corr[i,j]=0.4
                else:
                    corr[i,j]=0.2
ep6jt1vc

ep6jt1vc1#

import numpy as np
import pandas as pd

s="""# LOAN SECTOR  COUNTRY
Loan 1  food    germany
Loan 2  telecom italy
Loan 3  auto    japan
Loan 4  food    japan
Loan 5  telecom germany
Loan 6  auto    italy
Loan 7  auto    italy"""

rows = s.split('\n')
data = [r.split('\t') for r in rows[1:]]
header = rows[0].split('\t')
df = pd.DataFrame(data, columns=header)

n = len(df)
cols = df['# LOAN']
cmat1 = pd.DataFrame(np.full((n, n), 0), columns=cols, index=cols)
cmat2 = pd.DataFrame(np.full((n, n), 0), columns=cols, index=cols)
for sec in df.SECTOR.unique():
    idx = df.SECTOR == sec
    cmat1.iloc[idx, idx] = 1
for cou in df.COUNTRY.unique():
    idx = df.COUNTRY == cou
    cmat2.iloc[idx, idx] = 1

cmat = cmat1 + cmat2
cmat = cmat.replace(0, 0.05)
cmat = cmat.replace(1, 0.25)
cmat = cmat.replace(2, 0.35)
np.fill_diagonal(cmat.values, 1)

print(cmat)

印刷品

# LOAN  Loan 1  Loan 2  Loan 3  Loan 4  Loan 5  Loan 6  Loan 7
# LOAN                                                        
Loan 1    1.00    0.05    0.05    0.25    0.25    0.05    0.05
Loan 2    0.05    1.00    0.05    0.05    0.25    0.25    0.25
Loan 3    0.05    0.05    1.00    0.25    0.05    0.25    0.25
Loan 4    0.25    0.05    0.25    1.00    0.05    0.05    0.05
Loan 5    0.25    0.25    0.05    0.05    1.00    0.05    0.05
Loan 6    0.05    0.25    0.25    0.05    0.05    1.00    0.35
Loan 7    0.05    0.25    0.25    0.05    0.05    0.35    1.00

相关问题