Python-pandas-datafram中使用statsmodel平滑样条曲线

2024-05-15 11:21:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要做集团的平滑销售百分比值,这可能是不稳定的情况下,缺货的情况。我的数据在熊猫数据框中。下面是我正在尝试的代码:

from scipy.interpolate import UnivariateSpline
s = base_data1.groupby(['MDSE_ITEM_I','CO_LOC_I'])\
.transform(lambda x: UnivariateSpline(np.arange(x.count()), x['PCT_TILL_DATE'].value, s=x.count()))

这里我将np.arange(x.count())作为x单调递增数组传递,并将Pandas系列x['PCT_TILL_DATE'].value的值作为y传递,平滑因子足够好s作为x.count()。但是我得到了错误:

KeyError: ('PCT_TILL_DATE', u'occurred at index GREG_D')

我错过了什么?在


Tags: 数据代码fromdatevaluecountnp情况
1条回答
网友
1楼 · 发布于 2024-05-15 11:21:51

您不需要选择所需的列,因为transform()已经将其转换为一个序列,您不能这样索引它。在

另外,UnitvariateSpline返回一个“fitted”对象,您需要使用所需的x-output再次调用该对象以获得一些实际值。在

import pandas as pd
from scipy.interpolate import UnivariateSpline

n = 16
df = pd.DataFrame({'data1': np.cos(np.linspace(0,np.pi*4, n)),
                   'data2': np.random.randn(n),
                   'class_a': np.array([0]*(n//2)+[1]*(n//2)),
                   'class_b': np.array([1]*n)})

def grpfunc(grp):

    n = len(grp)
    x = np.arange(n)

    spl = UnivariateSpline(x, grp.values, s=n)

    return spl(x)

df.groupby(['class_a', 'class_b']).transform(grpfunc)

enter image description here

相关问题 更多 >