2017-03-07 28 views
0

我需要通過平滑銷售百分比值進行分組,因銷售百分比值可能由於缺貨情況而不穩定。我有熊貓數據框中的數據。這裏是我嘗試代碼:在Python熊貓數據框內使用statsmodel進行樣條平滑

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單調遞增的陣列和傳球的熊貓系列x['PCT_TILL_DATE'].valuey足夠好的平滑因子sx.count()。然而我越來越錯誤:

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

我在這裏失蹤?

回答

1

你不需要選擇你想要的列,因爲transform()已經把它變成一個Series,你不能像這樣索引。

此外,UnitvariateSpline返回一個'擬合'的對象,你需要再次調用你想要的x輸出來獲得一些實際值。

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