正如标题所暗示的那样,Pandas中ols命令中的滚动功能选项在statsmodels中迁移到哪里?我似乎找不到它.熊猫告诉我厄运正在起作用:
FutureWarning: The pandas.stats.ols module is deprecated and will be removed in a future version. We refer to external packages like statsmodels, see some examples here: http://statsmodels.sourceforge.net/stable/regression.html
model = pd.ols(y=series_1, x=mmmm, window=50)
Run Code Online (Sandbox Code Playgroud)
事实上,如果你做的事情如下:
import statsmodels.api as sm
model = sm.OLS(series_1, mmmm, window=50).fit()
print(model.summary())
Run Code Online (Sandbox Code Playgroud)
你得到结果(窗口不会影响代码的运行)但你只得到整个时期的回归运行参数,而不是应该应该处理的每个滚动周期的一系列参数.
我已经对 pandas 执行了 groupby,我想应用一个复杂的函数,该函数需要多个输入,并给出一个 pandas Series 作为输出,我想将其刻录在原始数据框中。这对我来说是一个已知的过程,并且运行得很好 - 除了最后一个案例(我对无法完整发布代码表示歉意)。本质上我得到了一个TypeError: incompatible index of inserted column with frame index. 但是,如下所示,我不应该得到一个。
group_by部分:
all_in_data_risk['weights_of_the_sac'] = all_in_data_risk.groupby(['ptf', 'ac'])['sac', 'unweighted_weights_by_sac', 'instrument_id', 'risk_budgets_sac'].apply(lambda x: wrapper_new_risk_budget(x, temp_fund_all_ret, method_compute_cov))
Run Code Online (Sandbox Code Playgroud)
其中函数是:
def wrapper_new_risk_budget:
print(x.index)
...
print(result.index)
return result.loc[:, 'res']
Run Code Online (Sandbox Code Playgroud)
这引发了这个错误:
raise TypeError('incompatible index of inserted column '
TypeError: incompatible index of inserted column with frame index
Run Code Online (Sandbox Code Playgroud)
问题是这样的:
print(np.array_equal(result.index, x.index))
Run Code Online (Sandbox Code Playgroud)
产生所有True. 这应该是索引匹配的保证,因此问题不应该简单地存在。
现在,我知道我提供的信息至少可以说是很少见的,但是您是否知道问题出在哪里?
ps:我已经尝试将结果转换为数据帧并尝试将输出重新转换为pd.Series(result.loc[:, 'res'].values, index=result.index)
我发现statsmodels线性模型的 anova 测试的实现非常有用(http://www.statsmodels.org/dev/generated/statsmodels.stats.anova.anova_lm.html#statsmodels.stats.anova.anova_lm)但我想知道,因为它不存在于库中,如何为逻辑回归部分构建等效版本。
公式:
from statsmodels.formula.api import ols, logit
import statsmodels.api as sm
ols(formula_str, data=data_on_which_to_perform_analysis).fit()
logit(formula_str, data=data_on_which_to_perform_analysis).fit()
sm.stats.anova_lm()
Run Code Online (Sandbox Code Playgroud)
这意味着本质上(通过查看源代码)复制anova_single. 有没有人已经在某个远程存储库中做过这件事?我问是因为实现速度非常快,而且非常深入statsmodels核心库,所以解决它并不容易(至少以我目前的技能水平)
关于如何进行的任何建议?
正如标题所示,我开发了一个函数,给定一个ORDERED升序列表,你只保留距离至少为k个周期的元素,但它会在循环时动态改变迭代器.我被告知这应该像瘟疫一样被避免,尽管我并不完全相信为什么这是一个如此糟糕的想法,但我相信那些我一直倾向于接受培训的人,因此就如何寻求建议避免这种做法.代码如下:
import pandas as pd
from datetime import days
a = pd.Series(range(0,25,1), index=pd.date_range('2011-1-1',periods=25))
store_before_cleanse = a.index
def funz(x,k):
i = 0
while i < len(x)-1:
if (x[i+1]-x[i]).days < k:
x = x[:i+1] + x[i+2:]
i = i-1
i = i + 1
return x
print(funz(store_before_cleanse,10))
Run Code Online (Sandbox Code Playgroud)
您认为可以做些什么来避免它?ps:不要担心没有订购列表的解决方案.将给出的列表将始终以升序方式排序.
情况:我有一个实时交易脚本,它在我的主要thread(Python)中每 x 分钟计算一次所有类型的东西。订单发送是通过这样的thread。尽管此类订单的接收和执行是另一回事,因为我不能让 x 分钟过去,但我一进来就需要它们。我初始化了另一个thread以检查数据库表中的此类数据(执行)(POSTGRES SQL) .
问题:我不能连续每 xx 毫秒执行一次查询,从数据库中获取数据,比较表长度,然后由于各种原因(不仅是使用这种数据库的人,性能问题等)得到差异。所以我查找了一些解决方案并提出了这个线程(https://dba.stackexchange.com/questions/58214/getting-last-modification-date-of-a-postgresql-database-table),其中基本上是就是 “没有可靠的、权威的表的最后修改时间记录”。
问题:我能做些什么,即:从postgres sql表中获得近乎瞬时的响应,而不用使整个事情过载Python?
我的问题:我有一个分类变量列表,如
import numpy as np
a = np.array(['A','A','B','B','C','C','C'])
unique_vars = {v: k for k, v in enumerate(np.unique(a))}
c = np.array([unique_vars[i] for i in a])
Run Code Online (Sandbox Code Playgroud)
产量:
array([0, 0, 1, 1, 2, 2, 2])
Run Code Online (Sandbox Code Playgroud)
我想变成:
res = [0,0, 1,1, 0,0,0]
Run Code Online (Sandbox Code Playgroud)
实质上,在每个"开关"处,数字必须从1切换到0.
只是想知道,将数组除以标量的最有效方法是什么?我可以清楚地循环它,但在我的情况下效率是最重要的。
常见的琐碎方式:
var array_2 = []
var array_1 = [original_data
var divisor = my_scalar
for(var i = 0, length = array.length; i < length; i++){
array_2.push(array[i]/divisor)
}
Run Code Online (Sandbox Code Playgroud)
我可以使用的任何技巧(或一种新方法)?
python ×6
pandas ×2
statsmodels ×2
anova ×1
arrays ×1
auto-update ×1
deprecated ×1
group-by ×1
indexing ×1
iterator ×1
javascript ×1
numpy ×1
performance ×1
postgresql ×1