我有一个数据帧:
CAT ^GSPC
Date
2012-01-06 80.435059 1277.810059
2012-01-09 81.560600 1280.699951
2012-01-10 83.962914 1292.079956
....
2017-09-16 144.56653 2230.567646
Run Code Online (Sandbox Code Playgroud)
我想找到每个时期最近63天的股票/和标准普尔指数的斜率.我试过了 :
x = 0
temp_dct = {}
for date in df.index:
x += 1
max(x, (len(df.index)-64))
temp_dct[str(date)] = np.polyfit(df['^GSPC'][0+x:63+x].values,
df['CAT'][0+x:63+x].values,
1)[0]
Run Code Online (Sandbox Code Playgroud)
但是我觉得这是非常"单声道"的,但我在将滚动/移位功能整合到这里时遇到了麻烦.
我的预期输出是有一个名为"Beta"的列,其具有所有可用日期的S&P(x值)和库存(y值)的斜率
我有一个 defaultdict:
dd = defaultdict(list,
{'Tech': ['AAPL','GOOGL'],
'Disc': ['AMZN', 'NKE'] }
Run Code Online (Sandbox Code Playgroud)
和一个看起来像这样的数据框:
AAPL AMZN GOOGL NKE
1/1/10 100 200 500 200
1/2/10 100 200 500 200
1/310 100 200 500 200
Run Code Online (Sandbox Code Playgroud)
我想要的输出是根据字典的值对数据框求和,以键为列:
TECH DISC
1/1/10 600 400
1/2/10 600 400
1/3/10 600 400
Run Code Online (Sandbox Code Playgroud)
pandas groupby 文档说,如果您传递字典,它会执行此操作,但我最终得到的只是使用以下代码的空 df:
df.groupby(by=dd).sum() ##returns empty df
Run Code Online (Sandbox Code Playgroud) 这是一个带有背景渐变的样式器对象:
无论如何,我只是在寻找按原样保存它。已尝试使用 .render() 但不确定如何处理该 HTML 代码,并且从阅读有关该主题的其他问题来看,目前似乎没有保存这些的方法。有没有黑客的方法来做到这一点?
这是数组:
array([[ 0.264 , 0.271 , 0.285 , 0.289 , 0.329 ],
[ 0.053 , 0.051 , 0.045 , 0.038 , 0.031 ],
[ 0.006 , 0.007 , 0.009 , 0.01 , 0.01 ],
[-3.98650106, -3.95728537, -3.99767582, -4.20624136, -3.54186842],
[-3.22600677, -2.87623307, -2.03420988, -1.54443176, -1.41006671]])
Run Code Online (Sandbox Code Playgroud)
和我有的代码行:
df.style.background_gradient(cmap='RdYlGn',low=.09,high=.18,axis=1)
Run Code Online (Sandbox Code Playgroud) 我正在尝试将所有 11 个扇区的图形从扇区列表保存到 1 个 pdf 表。到目前为止,下面的代码在单独的工作表(11 个 pdf 页)上给了我一个图表。
每日回报函数是我正在绘制的数据。每个图形上有 2 条线。
with PdfPages('test.pdf') as pdf:
n=0
for i in sectorlist:
fig = plt.figure(figsize=(12,12))
n+=1
fig.add_subplot(4,3,n)
(daily_return[i]*100).plot(linewidth=3)
(daily_return['^OEX']*100).plot()
ax = plt.gca()
ax.set_ylim(0, 100)
plt.legend()
plt.ylabel('Excess movement (%)')
plt.xticks(rotation='45')
pdf.savefig(fig)
plt.show()
Run Code Online (Sandbox Code Playgroud) 我正在绘制部门及其所有股票的收益。我希望值> 100为绿色,而<100为红色。这是我的代码:
sector_lst = ['XLK','XLF','XLE'] ## etc.
for i in sector_lst:
fig = plt.figure(figsize=(12, 8))
for x in sectordict[i]: #sectordict[i] is all the stocks in a sector (so AAPL, GOOG, etc. for tech)
if pct_change[x] > 1:
pct_change[sectordict[i]].plot(kind='bar',color='g')
##if pct_chg < 1
else:
pct_change[sectordict[i]].plot(kind='bar',color='r')
plt.title(i)
Run Code Online (Sandbox Code Playgroud)
到目前为止,这会将整个扇区图形返回为绿色或红色。如果第一个值大于100,则所有库存均为绿色,反之亦然。
我的预期输出是有11张图(当前它会这样做),但是图中的每种股票都有不同的颜色,如果股票的回报率> 100%,则显示绿色,而<100%,则显示红色。
下面是一个名为“compmatrix”的 df:
-3.0 -5.0 -7.0
Gain/DD*DD% 0.009000 0.034000 0.088000
Gain/Expsr% 0.487000 0.927000 1.628000
Gain/MaxDD 0.015000 0.021000 0.025000
MaxDD*iBeta 32.633 193.536 856.520
Run Code Online (Sandbox Code Playgroud)
由于值差异很大,我想对每一行(相对于整个数据框)应用热图。
import seaborn as sns
sns.heatmap(compmatrix,cmap='RdYlGn_r',annot=True)
Run Code Online (Sandbox Code Playgroud)
但事实上没有 axis=1 让我感到困惑。似乎无法在文档中找到我正在寻找的解决方案。
我有一个名为'XLK'的df:
Market Cap PE
AAN 3.25B 23.6
AAPL 819.30B 18.44
ACFN 6.18M 2.1
ACIW 2.63B 103.15
Run Code Online (Sandbox Code Playgroud)
我只想要价值> 1亿的市值,所以预期产量是:
Market Cap PE
AAN 3.25B 23.6
AAPL 819.30B 18.44
ACIW 2.63B 103.15
Run Code Online (Sandbox Code Playgroud)
我已经尝试将字母转换为适当的0而没有成功:
XLK['Market Cap'].replace('M','000000')
XLK.drop[XLK_quote['Market Cap'] < '100M'].index
Run Code Online (Sandbox Code Playgroud) 我有一个名为 fajita 的美味空数组:
fajita = np.empty(2)
array([ 2.00000000e+00, 1.72723382e-77])
Run Code Online (Sandbox Code Playgroud)
当我使用:
np.insert(fajita,0,[2,2])
Run Code Online (Sandbox Code Playgroud)
我得到:
array([ 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 1.72723382e-77])
Run Code Online (Sandbox Code Playgroud)
这里的问题是我只想要插入的 2 个值,我不想保留空数组中的先前值。预期的输出应该是一个只插入了 2 个值的数组。就像是:
array([ 2.00000000e+00, 2.00000000e+00])
Run Code Online (Sandbox Code Playgroud) 我正在尝试用df“ p_df”(144行x 1列)减去df“ stock_returns”(144行x 517列)。
我试过了;
stock_returns - p_df
stock_returns.rsub(p_df,axis=1)
stock_returns.substract(p_df)
Run Code Online (Sandbox Code Playgroud)
但是它们都不起作用,并且都返回Nan值。
我正在通过此fnc传递它,并使用for循环获取args:
def disp_calc(returns, p, wi): #apply(disp_calc, rows = ...)
wi = wi/np.sum(wi)
rp = (col_len(returns)*(returns-p)**2).sum() #returns - p causing problems
return np.sqrt(rp)
for i in sectors:
stock_returns = returns_rolling[sectordict[i]]#.apply(np.mean,axis=1)
portfolio_return = returns_rolling[i]; p_df = portfolio_return.to_frame()
disp_df[i] = stock_returns.apply(disp_calc,args=(portfolio_return,wi))
Run Code Online (Sandbox Code Playgroud)
我的预期输出是将第一个df中的所有517个cols减去p_df中的1个col。因此最终结果仍为517列。谢谢