首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用时间序列数据和群配在大熊猫中的应用

利用时间序列数据和群配在大熊猫中的应用
EN

Stack Overflow用户
提问于 2016-11-15 22:40:25
回答 1查看 88关注 0票数 0

我正试图为现有的熊猫数据框架mydf指定一个新的专栏。要添加的系列是计算作为字符串传递的表达式的结果。例如,表达式可以包含python函数调用:

代码语言:javascript
复制
formula = 'myfunction(mydf.v1)'

myfunction如下所示

代码语言:javascript
复制
def myfunction(series):
    return recursive_filter(series, 0.1)

下面的代码将计算表达式并执行myfunction,并将列v2分配给mydf

代码语言:javascript
复制
mydf.assign(v2 = eval(formula))

但是,我需要通过Market来执行这个函数。输出应如下表所示

代码语言:javascript
复制
Market      Date          v1    v2
UK          2013-01-01    10   10.00
UK          2013-01-02    10   11.00 
UK          2013-01-03    10   11.10
UK          2013-01-04    10   11.11
US          2013-01-01    10   10.00
US          2013-01-02    10   11.00
US          2013-01-03    10   11.10
US          2013-01-04    10   11.11

我尝试了以下代码(我不确定它是否会产生正确的结果.)

代码语言:javascript
复制
mydf.groupby('CrossSection').apply(mydf.assign(v2 = eval(formula)))

但是,这会产生此错误。

代码语言:javascript
复制
TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-15 23:49:35

您所遇到的问题之一是,公式硬编码DataFrame来应用它,即mydf

不管怎么说,有件事应该管用的。我无法找到一种方法不创建另一个dataframe,但是如果您的数据集不是非常大,那么它就不会有多大了。

我重写了这个公式,以接受要应用它的数据格式的字符串格式。

代码语言:javascript
复制
from statsmodels.tsa.filters.filtertools import recursive_filter

formula = 'myfunction({}.v1)'
def myfunction(series):
    return recursive_filter(series, 0.1)

df2 = mydf.groupby('Market').apply(lambda df: df.assign(v2 = eval(formula.format("df"))))
df2.index = df2.index.droplevel(level=0)
df2

结果:

代码语言:javascript
复制
  Market        Date  v1     v2
0     UK  2013-01-01  10  10.00
1     UK  2013-01-02  10  11.00
2     UK  2013-01-03  10  11.10
3     UK  2013-01-04  10  11.11
4     US  2013-01-01  10  10.00
5     US  2013-01-02  10  11.00
6     US  2013-01-03  10  11.10
7     US  2013-01-04  10  11.11
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40621005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档