首页 > 解决方案 > Pandas .describe() 在表中返回错误的列值

问题描述

查看gld_weight图 1 的列。它抛出了完全错误的值。btc_weight + gld_weight应该总是加1。但是当我使用describe函数时,为什么列gld_weight与返回的行值不对应?

图1:在此处输入图像描述

图 2:在此处输入图像描述

图 3:在此处输入图像描述

这是我的源代码:

import numpy as np
import pandas as pd
from pandas_datareader import data as wb
import matplotlib.pyplot as plt

assets = ['BTC-USD', 'GLD']
mydata = pd.DataFrame()

for asset in assets:
    mydata[asset] = wb.DataReader(asset, data_source='yahoo', start='2015-1-1')['Close']

cleandata = mydata.dropna()
log_returns = np.log(cleandata/cleandata.shift(1))

annual_log_returns = log_returns.mean() * 252 * 100
annual_log_returns

annual_cov = log_returns.cov() * 252
annual_cov
pfolio_returns = []
pfolio_volatility = []
btc_weight = []
gld_weight = []

for x in range(1000):
    weights = np.random.random(2)
    weights[0] = weights[0]/np.sum(weights)
    weights[1] = weights[1]/np.sum(weights)
    weights /= np.sum(weights)
    btc_weight.append(weights[0])
    gld_weight.append(weights[1])


    pfolio_returns.append(np.dot(annual_log_returns, weights))
    pfolio_volatility.append(np.sqrt(np.dot(weights.T, np.dot(annual_cov, weights))))

pfolio_returns
pfolio_volatility
npfolio_returns = np.array(pfolio_returns)
npfolio_volatility = np.array(pfolio_volatility)

new_portfolio = pd.DataFrame({
    'Returns': npfolio_returns,
    'Volatility': npfolio_volatility,
    'btc_weight': btc_weight,
    'gld_weight': gld_weight
})

标签: python-3.xpandasdataframe

解决方案


我不是 100% 确定我的问题是正确的,但一个问题可能是,您没有将输出重新分配给新变量,因此没有保存它。尝试在此问题上调整您的代码:

new_portfolio = new_portfolio.sort_values(by="Returns")

或将就地参数设置为 True -链接


推荐阅读