python-3.x - 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
})
解决方案
我不是 100% 确定我的问题是正确的,但一个问题可能是,您没有将输出重新分配给新变量,因此没有保存它。尝试在此问题上调整您的代码:
new_portfolio = new_portfolio.sort_values(by="Returns")
或将就地参数设置为 True -链接
推荐阅读
- reactjs - react-lottie:动画不会显示
- powershell - 有没有办法用 exportToCsv 对结果集进行分区?
- javascript - Firebase云功能:从文档创建中执行查询,然后删除除新创建的结果之外的结果
- python - TypeError:迭代 0-d 张量
- spring - SessionCreationPolicy.STATELESS 时显示 spring 安全认证对象
- flutter - 等效于 Riverpod 中的 ChangeNotifierProvider 小部件
- mysql - 字符串部分搜索
- gnuplot - Inkscape 裁剪使用 gnuplot 生成的 eps 文件
- nix - Nix:将其他派生的子目录添加到 PATH
- c - 是否存在可移植的 pthread_sleep() 函数?