首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Group-by用于生成多个变量的函数

Group-by用于生成多个变量的函数
EN

Stack Overflow用户
提问于 2021-03-14 12:38:44
回答 1查看 73关注 0票数 1

我正在尝试使用技术分析库(TA-lib)计算一些分组条目:https://mrjbq7.github.io/ta-lib/

某些函数会生成两个变量AR_UP和AR_DOWN。

在不执行group-by的情况下,我将使用以下内容:

代码语言:javascript
复制
dft['AR_UP'], dft['AR_DOWN'] = ta.AROON(dft['High'], dft['Low'], 14)

它将在dft中生成AR_UP和AR_DOWN

但是,当我尝试应用group-by时:

代码语言:javascript
复制
grouped=dft.groupby(["StockCode"]).apply(lambda x: (ta.AROON(x['High'], x['Low'], 14)))

这使我分组为:

代码语言:javascript
复制
StockCode
ABA    ([nan, nan, nan, nan, nan, nan, nan, nan, nan,...
ABP    ([nan, nan, nan, nan, nan, nan, nan, nan, nan,...
ABW    ([nan, nan, nan, nan, nan, nan, nan, nan, nan,...
ACQ    ([nan, nan, nan, nan, nan, nan, nan, nan, nan,...
ACU    ([nan, nan, nan, nan, nan, nan, nan, nan, nan,...
                             ...                        
WTL    ([nan, nan, nan, nan, nan, nan, nan, nan, nan,...
WZR    ([nan, nan, nan, nan, nan, nan, nan, nan, nan,...
XPL    ([nan, nan, nan, nan, nan, nan, nan, nan, nan,...
YBR    ([nan, nan, nan, nan, nan, nan, nan, nan, nan,...
Z1P    ([nan, nan, nan, nan, nan, nan, nan, nan, nan,...
Length: 282, dtype: object

有没有人能告诉我哪里出错了?

我还想将其重新分配回原始数据帧,因此类似于:

代码语言:javascript
复制
grouped=(grouped.reset_index()
.groupby("StockCode",as_index=False)
.apply(lambda x: x.assign (AR_UP, AR_DOWN=(ta.AROON(x['High'], x['Low'], 14))))
.set_index('index') )

有可能吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-14 14:55:59

这行得通吗?它适用于我的示例函数,但我无法安装该包。也许它也适用于你的函数。对于多个返回值,后跟applygroupby不能很好地工作。

代码语言:javascript
复制
import numpy as np
import pandas as pd

dft={'High': range(11,21),
     'Low': range(1,11),
     'StockCode':np.append(np.repeat("A", 6), np.repeat("B", 4))}

dft=pd.DataFrame(dft)

dft=dft.sort_values("StockCode")

def aroon(x, y, n):
    return x/sum(x)*n, y/sum(y)*n

def my(x):
    a, b=aroon(x["High"], x["Low"], 2)
    return pd.DataFrame({"UP":a, "LOW":b})

grp=dft.groupby("StockCode").apply(lambda x: my(x))

dat=pd.concat([dft, grp], axis=1)

print dat

   High  Low StockCode       LOW        UP
0    11    1         A  0.095238  0.271605
1    12    2         A  0.190476  0.296296
2    13    3         A  0.285714  0.320988
3    14    4         A  0.380952  0.345679
4    15    5         A  0.476190  0.370370
5    16    6         A  0.571429  0.395062
6    17    7         B  0.411765  0.459459
7    18    8         B  0.470588  0.486486
8    19    9         B  0.529412  0.513514
9    20   10         B  0.588235  0.540541
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66621138

复制
相关文章

相似问题

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