小编Bra*_*mon的帖子

具有行业水平约束的SciPy投资组合优化

在这里尝试优化投资组合权重分配,以通过限制风险最大化我的收益函数。我没有问题,可以通过简单的约束(找到所有权重的总和等于1)来找到产生给我的收益函数的最优权重,并使我的总风险低于目标风险的另一个约束是没有问题的。

我的问题是,如何为每个组添加行业权重界限?

我的代码如下:

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import scipy.optimize as sco

dates = pd.date_range('1/1/2000', periods=8)
industry = ['industry', 'industry', 'utility', 'utility', 'consumer']
symbols = ['A', 'B', 'C', 'D', 'E']  
zipped = list(zip(industry, symbols))
index = pd.MultiIndex.from_tuples(zipped)

noa = len(symbols)

data = np.array([[10, 9, 10, 11, 12, 13, 14, 13],
                 [11, 11, 10, 11, 11, 12, 11, 10],
                 [10, 11, 10, 11, 12, 13, 14, 13],
                 [11, 11, 10, 11, 11, 12, …
Run Code Online (Sandbox Code Playgroud)

python optimization portfolio scipy pandas

4
推荐指数
1
解决办法
2894
查看次数

计算csv中"NaN"(不是零或空格)的数量

是否可以让Python计算csv文件中'NaN'(作为字符串/文本)的数量?尝试使用pandas' read_csv,但是一些具有空白的列也被读作NaN.我所知道的唯一工作方法是使用excel查找'NaN'作为值.

谁知道其他方法?提前致谢!

python nan python-3.x pandas

4
推荐指数
1
解决办法
1367
查看次数

如何正确使用包含间隔的多索引的Pandas Dataframe?

我正在尝试切入具有由IntervalIndex和常规索引组成的MultiIndex的DataFrame.示例代码:

from pandas import Interval as ntv

df = pd.DataFrame.from_records([
   {'id': 1, 'var1': 0.1, 'ntv': ntv(0,10), 'E': 1}, 
   {'id':2, 'var1': 0.5, 'ntv': ntv(0,12), 'E': 0}
], index=('ntv', 'id'))
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

            E  var1
ntv     id
(0, 10] 1   1   0.1
(0, 12] 2   0   0.5
Run Code Online (Sandbox Code Playgroud)

我想要做的是以特定值切入DataFrame并返回具有包含该值的间隔的所有行.例如:

df.loc[4]
Run Code Online (Sandbox Code Playgroud)

应该回归(平凡)

    E  var1
id
1   1   0.1
2   0   0.5
Run Code Online (Sandbox Code Playgroud)

问题是我不断得到一个TypeError关于索引,并且文档显示了一个类似的操作(但在单级索引上)确实产生了我正在寻找的东西.

TypeError: only integer scalar arrays can be converted to a scalar index
Run Code Online (Sandbox Code Playgroud)

我尝试了很多东西,似乎没有什么能正常工作.我可以id在数据框中包含该列,但我宁愿保持我的索引唯一,我会不断地调用set_index('id').

我觉得要么a)我缺少关于MultiIndexes的东西,或者b)在MultiIndex中使用IntervalIndex存在错误/歧义.

python dataframe pandas

4
推荐指数
1
解决办法
419
查看次数

时间序列数据:将数据装箱到每一天,然后按星期几绘制

我有一个非常简单的 Pandas DataFrame,格式如下:

date        P1      P2      day
2015-01-01  190     1132    Thursday
2015-01-01  225     1765    Thursday
2015-01-01  3427    29421   Thursday
2015-01-01  945     7679    Thursday
2015-01-01  1228    9537    Thursday
2015-01-01  870     6903    Thursday
2015-01-02  785     4768    Friday
2015-01-02  1137    7065    Friday
2015-01-02  175     875     Friday
Run Code Online (Sandbox Code Playgroud)

其中 P1 和 P2 是不同的感兴趣参数。我想为每个 P1 和 P2创建一个看起来像这样的条形图。如数据所示,我每天都有几个值。我想平均给定日期的给定值,然后针对星期几进行绘制(以便将第 1 周星期一的平均值添加到第 2 周星期一等)。

我是 python 的新手,我目前的方法很糟糕,涉及几个循环。我目前有两个专用的代码部分 - 一个用于计算平均值,另一个用于一次完成一周中的每一天并计算绘图结果。有没有更干净的方法来做到这一点?

python matplotlib pandas

4
推荐指数
1
解决办法
2623
查看次数

最小值最后出现的指数

标题可能不直观 - 让我举一个例子.说我有df,创建时:

a = np.array([[ 1. ,  0.9,  1. ],
              [ 0.9,  0.9,  1. ],
              [ 0.8,  1. ,  0.5],
              [ 1. ,  0.3,  0.2],
              [ 1. ,  0.2,  0.1],
              [ 0.9,  1. ,  1. ],
              [ 1. ,  0.9,  1. ],
              [ 0.6,  0.9,  0.7],
              [ 1. ,  0.9,  0.8],
              [ 1. ,  0.8,  0.9]])

idx = pd.date_range('2017', periods=a.shape[0])
df = pd.DataFrame(a, index=idx, columns=list('abc'))
Run Code Online (Sandbox Code Playgroud)

我可以得到每个相应列的索引位置最小值

df.idxmin()
Run Code Online (Sandbox Code Playgroud)

现在,我怎么能拿列方向最大最后一次出现的位置,达到最低的位置?

在视觉上,我想找到下面绿色最大的位置:

在此输入图像描述

忽略最小值后的最大值.

我可以这样做.apply,但可以使用掩码/高级索引来完成吗?

期望的结果: …

python indexing numpy pandas

4
推荐指数
1
解决办法
547
查看次数

GridSearchCV 为此运行多少种组合?

使用 sklearn 在随机森林分类器上运行网格搜索。这运行的时间比我想象的要长,我试图估计这个过程还剩下多少时间。我认为它会做的拟合总数是 3*3*3*3*5 = 405。

clf = RandomForestClassifier(n_jobs=-1, oob_score=True, verbose=1)
param_grid = {'n_estimators':[50,200,500],
'max_depth':[2,3,5],
'min_samples_leaf':[1,2,5],
'max_features': ['auto','log2','sqrt']
}

gscv = GridSearchCV(estimator=clf,param_grid=param_grid,cv=5)
gscv.fit(X.values,y.values.reshape(-1,))
Run Code Online (Sandbox Code Playgroud)

从输出中,我看到它循环执行任务,其中每组都是估计器的数量:

[Parallel(n_jobs=-1)]: Done 34 tasks | elapsed: 1.2min
[Parallel(n_jobs=-1)]: Done 184 tasks | elapsed: 5.3min
[Parallel(n_jobs=-1)]: Done 200 out of 200 tasks | elapsed: 6.2min finished
[Parallel(n_jobs=8)]: Done 34 tasks | elapsed: 0.5s
[Parallel(n_jobs=8)]: Done 184 tasks | elapsed: 3.0s
[Parallel(n_jobs=8)]: Done 200 tasks out of 200 tasks | elapsed: 3.2s finished
[Parallel(n_jobs=-1)]: Done 34 tasks | …
Run Code Online (Sandbox Code Playgroud)

python machine-learning random-forest scikit-learn grid-search

4
推荐指数
1
解决办法
2403
查看次数

Pandas:groupby 列出

我有如下数据:

id  value   time

1   5   2000
1   6   2000
1   7   2000
1   5   2001
2   3   2000
2   3   2001
2   4   2005
2   5   2005
3   3   2000
3   6   2005
Run Code Online (Sandbox Code Playgroud)

我的最终目标是将数据放在如下列表中:

[[5,6,7],[5]] (this is for id 1 grouped by the id and year)
[[3],[3],[4,5]] (this is for id 2 grouped by the id and year)
[[3],[6]] (same logic as above)
Run Code Online (Sandbox Code Playgroud)

我已经使用df.groupby(['id', 'year']). 但在那之后,我无法访问组并以上述格式获取数据。

python pandas

4
推荐指数
2
解决办法
2万
查看次数

请求/ aiohttp:关闭响应对象

我对需要有点糊涂了.close()两个响应对象requestsaiohttp.(请注意,这是一个单独的实例方法,而不是 - session.close()我在谈论响应对象本身.)

  • 请问Response(requests)或ClientResponse(aiohttp)在任何时候需要显式调用.close()
  • 如果不是,那么将响应本身用作上下文管理器的目的是什么?(async with session.request('GET', 'https://www.pastebin.com')下面.)为什么要定义两个dunder方法,如果它被隐式关闭,如下所示?

一些简单的测试(下面)似乎暗示响应在Session上下文管理器中定义时会自动关闭. (这本身调用self.close()__exit____aexit__但这是会话,而不是Response对象的关闭.)

示例 - requests

>>> import requests
>>> 
>>> with requests.Session() as s:
...     resp = s.request('GET', 'https://www.pastebin.com')
...     resp.raise_for_status()
...     print(resp.raw.closed)  # `raw` is urllib3.response.HTTPResponse object
...     print(resp.raw._pool)
...     print(resp.raw._connection)
...     c = resp.text
... 
True
HTTPSConnectionPool(host='pastebin.com', port=443)
None
>>>
>>> while 1:
...     print(resp.raw.closed) …
Run Code Online (Sandbox Code Playgroud)

python python-requests aiohttp python-3.7

4
推荐指数
1
解决办法
648
查看次数

寻找 Pandas.DateTimeIndex.is_dst()

我有一个带有 DateTimeIndex 的 DateFrame,即

import pandas as pd
dates = pd.date_range('2018-04-01', periods=96, freq='15T', tz='Australia/Sydney', name='timestamp')
df = dates.to_frame(index=False)
df.set_index(dates.name, inplace=True)
Run Code Online (Sandbox Code Playgroud)

我想创建一个带有 0/1 指标列的列,夏季为 1,冬季为 0,但我找不到相关的 dst / is_dst 属性,即我想要类似的东西

df['is_dst'] = df.index.is_dst()
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议正确的方法/属性是。或者我是否需要转换到不同的“日期时间”课程?

我需要一些通用的东西——即适用于任何时区,包括没有夏令时的“澳大利亚/布里斯班”。我宁愿不必解析时区偏移量并尝试确定它是夏季/冬季。

python pandas

4
推荐指数
1
解决办法
697
查看次数

uwsgi_param 和 proxy_set_header 之间的区别

当使用 Nginx 作为 uWSGI/Django 的反向代理时, Nginx 配置中uwsgi_param和之间有什么区别?proxy_set_headeruWSGI 参数是否像 HTTP 标头,或者完全不同,如果是,其目的是什么?


背景:我正在 Django 中对与安全相关的 HTTP 标头进行一些修改。我有一个使用 Nginx 作为反向代理的设置,uWSGI 为 Django 应用程序提供服务并作为代理服务器:

                           _____________________________________
                           |                                    |
            http or https* |           uwsgi                    |
   browser --------------> | nginx --------------> uWSGI/Django |
                           |____________________________________|

* http 301-redirects to https equivalent;
  https response returns Strict-Transport-Security header
Run Code Online (Sandbox Code Playgroud)

这里有两种机制可以让 http 请求“变成”https 请求:

  1. Nginx将端口80请求重定向到443,例如请求历史链有301重定向
  2. HTTPs 响应包含Strict-Transport-Security: max-age=31536000; includeSubDomains; preload响应标头;在这种情况下,永远不会有 302 重定向;浏览器接受客户端 http 请求并立即强制其转换为等效的 https。

也就是说,相关的 Django 设置如下所示:

# tail -n4 project/settings.py
SECURE_HSTS_SECONDS = 31536000  # …
Run Code Online (Sandbox Code Playgroud)

python django nginx uwsgi

4
推荐指数
1
解决办法
3106
查看次数