对于我的评估,我想
使用以下脚本运行OLS regression estimation
此URL中的数据集滚动1000窗口:https:
//drive.google.com/open?id =Python
0B2Iv8dfU4fTUa3dPYW5tejA0bzg.
# /usr/bin/python -tt
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from statsmodels.formula.api import ols
df = pd.read_csv('estimated.csv', names=('x','y'))
model = pd.stats.ols.MovingOLS(y=df.Y, x=df[['y']],
window_type='rolling', window=1000, intercept=True)
df['Y_hat'] = model.y_predict
Run Code Online (Sandbox Code Playgroud)
但是,当我运行我的Python脚本时,我收到此错误:AttributeError: module 'pandas.stats' has no attribute 'ols'
.这个错误可能来自我正在使用的版本吗?在pandas
安装我的Linux节点上有一个版本的0.20.2
import pandas as pd\nimport numpy as np\n\none = pd.read_csv('data1.csv')\ntwo = pd.read_csv('data2.csv')\n
Run Code Online (Sandbox Code Playgroud)\n\n我这样写代码,其中一个显示
\n\nA Date\n10 2011-01-03\n20 2011-01-04\n10 2011-01-06\n20 2011-01-07\n30 2011-01-10\n40 2011-01-13\n25 2011-01-15\n\xe3\x83\xbb\n\xe3\x83\xbb\n\xe3\x83\xbb\n
Run Code Online (Sandbox Code Playgroud)\n\n两个\xc2\xa0显示
\n\nB Date\n15 2011-01-01\n15 2011-01-02\n15 2011-01-03\n25 2011-01-07\n35 2011-01-10\n10 2011-01-13\n25 2011-01-15\n\xe3\x83\xbb\n\xe3\x83\xbb\n\xe3\x83\xbb\n
Run Code Online (Sandbox Code Playgroud)\n\n我想在数据框被标记时将 0 添加到缺失的 date\xe2\x80\x99s 数据中。\n现在我编写了代码
\n\none_and_two = pd.merge(one, two, on='Date', how='inner')\nprint(one_and_two)\n
Run Code Online (Sandbox Code Playgroud)\n\n并运行,one_and_two 是
\n\n \xe3\x80\x80A Date \xe3\x80\x80 B\n0 10 2011-01-03 15\n1 20 2011-01-07 25\n2 30 2011-01-10 35\n3 40 2011-01-13 10\n4 25 2011-01-15 25\n\xe3\x83\xbb\n\xe3\x83\xbb\n\xe3\x83\xbb\n
Run Code Online (Sandbox Code Playgroud)\n\n理想的输出是
\n\n \xe3\x80\x80A Date \xe3\x80\x80 B\n0 0 2011-01-01 …
Run Code Online (Sandbox Code Playgroud) 我有超过 800,000 行的数据。我想取其中一列的指数移动平均线 (EMA)。时间不是均匀采样的,我想在每次更新(行)时衰减 EMA。我的代码是这样的:
window = 5
for i in range(1, len(series)):
dt = series['datetime'][i] - series['datetime'][i - 1]
decay = 1 - numpy.exp(-dt / window)
result[i] = (1 - decay) * result[i - 1] + decay * series['midpoint'].iloc[i]
return pandas.Series(result, index=series.index)
Run Code Online (Sandbox Code Playgroud)
问题是,对于 800,000 行,这非常慢。无论如何使用numpy的其他一些功能来优化它?我无法对其进行矢量化,因为results[i]
它依赖于results[i-1]
.
示例数据在这里:
Timestamp Midpoint
1559655000001096130 2769.125
1559655000001162260 2769.127
1559655000001171688 2769.154
1559655000001408734 2769.138
1559655000001424200 2769.123
1559655000001433128 2769.110
1559655000001541560 2769.125
1559655000001640406 2769.125
1559655000001658436 2769.127
1559655000001755924 2769.129
1559655000001793266 2769.125
1559655000001878688 2769.143
1559655000002061024 2769.125
Run Code Online (Sandbox Code Playgroud) 我不确定返回在以下比较函数中是如何工作的?为什么它会返回这样的格式?
def func(self, num):
num = sorted([str(x) for x in num], cmp=self.compare)
def compare(self, a, b):
return [1, -1][a + b > b + a]
Run Code Online (Sandbox Code Playgroud) 我有一个大数据集,其中包含来自多个位置(以纬度/经度给出)超过 80 年的数据。我正在尝试计算整个时间范围内每个站点的 a 列和 b 列的 10 年平均值。下面是数据表的示例。
Lat Long Year Month Day a b
46.90625 -115.46875 1950 01 01 0.0000 1.1335
46.90625 -115.46875 1950 01 02 0.0000 1.1276
46.90625 -115.46875 1950 01 03 0.0000 1.1213
Run Code Online (Sandbox Code Playgroud)
这是我尝试过但一直迷失方向的示例。
fname = output1
df = pandas.read_table(output1)
lat_long_group = df.groupby(['Lat','Long','Year']).agg(['mean','count'])
monthly_average = lat_long_group.aggregate({'a':numpy.mean,
'b': numpy.mean})
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Pandas将两列转换为一列,该列是两个转换列的字典表示.
df = DataFrame({'Metrics' : [[("P", "P"), ("Q","Q")], ("K", "K"), ("Z", "Z")],
'Stage_Name' : ["P", "K", "Z"],
'Block_Name' : ["A", "B", "A"]})
Run Code Online (Sandbox Code Playgroud)
基本上我想合并Metrics
并Stage_Name
:
进入另一个名为的列merged
,例如,第一行将是:
{'P': [('P', 'P'), ('Q', 'Q')]}
Run Code Online (Sandbox Code Playgroud)
我知道如何将一行转换为字典表示,但是,我不知道如何在没有for循环的情况下对所有行执行此操作:
something = df.iloc[[0]].set_index('Stage_Name')['Metrics'].to_dict()
print something
Output: {'P': [('P', 'P'), ('Q', 'Q')]}
Run Code Online (Sandbox Code Playgroud)
后来我想基于聚合Block_Name
,所以对于合并列,结果将是两个字典加在一起Block_Name
:A
.
{'P': [('P', 'P'), ('Q', 'Q')], 'Z' : [('Z', 'Z')] }
Run Code Online (Sandbox Code Playgroud)
对于Stage_Name
和Metrics
,我只是将它附加到列表中,如下所示:
grouped = df.groupby(df['Block_Name'])
df_2 = grouped.aggregate(lambda x: tuple(x))
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?谢谢!
我有以下系列:
s = pd.Series([['a', 'b'], ['c', 'd'], ['f', 'g']])
>>> s
0 [a, b]
1 [c, d]
2 [f, g]
dtype: object
Run Code Online (Sandbox Code Playgroud)
什么是串联该系列中所有列表的最简单方法(最好是矢量化方法),所以我得到:
l = ['a', 'b', 'c', 'd', 'f', 'g']
Run Code Online (Sandbox Code Playgroud)
谢谢!
我从 CSV 文件中读取了数千行,其中包含用于计算不同输出的数据。我读取这个 CSV 文件并将输入存储在 Pandas 数据框中。然后我用来itterrows()
循环数据帧。有时我的代码会失败,此时我希望读取原始文件,但在失败后的行中拾取进程。因此,当发生这种情况时,请设置我的代码,以便在进入 for 循环之前取消注释两行并将原始数据帧缩小到一定大小itterrows()
:
# slicing it and re-indexing when a restart is needed
df_slice = df.iloc[1292:,]
for index,row in df_slice.iterrows():
Run Code Online (Sandbox Code Playgroud)
然而,如果我如上所示对原始数据帧进行切片,“itterrows()”循环中的索引值将从 1292 开始,因此会从较小的切片数据帧顶部跳过 1292 个位置。如何让它从 0/1 开始?
我尝试重置索引:
# slicing it and re-indexing when a restart is needed
df_slice = df.iloc[1292:,]
df_slice.reset_index()
for index,row in df_slice.iterrows():
Run Code Online (Sandbox Code Playgroud)
但这并没有改变任何事情 - 蒸馏器中的索引for index,row in df_slice.iterrows():
停留在 1292,因此切片索引下降了 1292 个位置。
那么,我如何才能直接iterrows()
到某个起始行(在原始索引上)或正确地切片并重置较小数据帧的索引,以便能够从新的“顶”行开始并向下移动。
在“cell1”和“cell2”下的列“t”上合并多级数据框的python/panda方法是什么?
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.arange(4).reshape(2, 2),
columns = [['cell 1'] * 2, ['t', 'sb']])
df2 = pd.DataFrame([[1, 5], [2, 6]],
columns = [['cell 2'] * 2, ['t', 'sb']])
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试合并时"t"
,python REPL 将出错
ddf = pd.merge(df1, df2, on='t', how='outer')
Run Code Online (Sandbox Code Playgroud)
有什么好的方法来处理这个问题?
我有一个很长的lst
包含独特元素.我想设计一个函数,它将元素列表作为输入,它可以有效地返回索引列表.我们假设找到他们的索引所需的项目都在lst
.
这是一个例子:
lst = ['ab','sd','ef','de']
items_to_find = ['sd', 'ef', 'sd']
>>> fo(lst, items_to_find)
# Output: [1,2,1]
Run Code Online (Sandbox Code Playgroud)
我有一个自己的解决方案,但效率不高.
>> [lst.index(x) for x in items_to_find]
Run Code Online (Sandbox Code Playgroud)
因为lst
它很长,我需要一个非常快速的算法来解决它.
python ×10
pandas ×8
dataframe ×2
list ×2
numpy ×2
python-3.x ×1
statsmodels ×1
time-series ×1