我有一个数据框,其中包含按名称和日期排序的股票数据.我正在try 将KAMA(考夫曼自适应移动平均线)函数应用于每只股票.当我将其应用于新列时,该函数与df一起使用,但不与groupby一起使用.

下面是一些虚拟数据,以及我目前在木星上try 过的数据.它返回:TypeError:‘Series’对象是可变的,因此它们不能被散列

import numpy as np
import pandas as pd
import talib as tb

df = pd.DataFrame()
df['NAME'] = ['A','A','A','A','A','A','A','A','A','A','A','A','A','A','A','A','A','A','A',
              'A','B','B','B','B','B','B','B','B','B','B','B','B','B','B','B','B','B','B',
              'B','B']
df['CLOSE'] = np.random.randint(1,100,df.shape[0])
df['NameNumber']=df.groupby('NAME').cumcount()
cols = ['NAME', 'NameNumber']
df['CN_PK'] = df[cols].apply(lambda row: '_'.join(row.values.astype(str)), axis=1)

close = df['CLOSE']
df['KAMA'] = tb.KAMA(close, timeperiod = 3)
df['GrpKAMA'] = df.groupby('NAME')['CLOSE'].apply(tb.KAMA(close,timeperiod = 3))
df.head(50)

推荐答案

为此,您需要按组提供数据:

df['GrpKAMA'] = df.groupby('NAME')['CLOSE'].apply(lambda x: tb.KAMA(x,timeperiod = 3))

或者,例如调用一个定制函数(您可以在其中打印数据并查看它包含的内容):

def f(x):
    print(x)

    return tb.KAMA(x,timeperiod = 3)


df['GrpKAMA'] = df.groupby('NAME')['CLOSE'].apply(f)

Python相关问答推荐

调查TensorFlow和PyTorch性能的差异

Python tkinter关闭第一个窗口,同时打开第二个窗口

如何分割我的收件箱,以便连续的数字各自位于自己的收件箱中?

如何使用关键参数按列对Pandas rame进行排序

在Python中,什么表达相当于0x1.0p-53?

pyramid 内部数组中的连续序列-两极

使用argsorted索引子集索引数组

Python无法在已导入的目录中看到新模块

如何销毁框架并使其在tkinter中看起来像以前的样子?

Python多处理:当我在一个巨大的pandas数据框架上启动许多进程时,程序就会陷入困境

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

如何从.cgi网站刮一张表到rame?

我如何使法国在 map 中完全透明的代码?

如何设置视频语言时上传到YouTube与Python API客户端

cv2.matchTemplate函数匹配失败

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

Python Pandas—时间序列—时间戳缺失时间精确在00:00

Pandas:计算中间时间条目的总时间增量