2016-11-01 153 views
3

特定の列 'df1'の現在の行の値が、前の5行の低い高位範囲の値の間にある回数をカウントしようとしています(2つの並列列で)。これはフォローアップの質問です - Dicksterはすでに重い持ち上げを完了しましたherepython pandas- AttributeError: 'Series'オブジェクトに 'columns'属性がありませんか?

Series()。between()メソッドは協力していません、AttributeError: 'Series' object has no attribute 'columns'という文句を言います。私はcolumns属性をどのように関与させているのか分かりません。

list1 = [[21,101],[22,110],[25,113],[24,112],[21,109],[28,108],[30,102],[26,106],[25,111],[24,110]] 
dict1 = {} 
dict1['df1'] = pd.DataFrame(list1,index=pd.date_range('2000-1-1',periods=10, freq='D'), columns=list('AB')) 
dict1['df2'] = pd.DataFrame(dict1['df1'] * (1-.05)) 
pan_so = pd.Panel(dict1) 
pan_so = pan_so.transpose(2,1,0) 

x = pan_so.ix[0,:,:] 
def btwn(x): # x is a dataframe 
    y = x['df1'].rolling(center=False,window=6) 
    z = x['df2'].rolling(center=False,window=6) 
    x['cnt_btwn'] = pd.Series(pd.Series(y[:-1]).between(z[-1], y[-1], inclusive=True).sum()) 
    return x 
btwn(x) 

私は間違っていますか?ありがとう!

答えて

3

このy[:-1]は、列インデクシングをサポートしないRollingオブジェクトにアクセスします。つまり、コード内に[:-1]という意味があります。変換関数を適用し、フィルタリングする前に実際の系列を取得する必要があります。

+2

こんにちはBoud - 変換関数についてもう少し具体的にできるか? – MJS

+0

は平均最大カウント数などが好きです。私はあなたになぜそのような[:-1]を置くのか不明です。先の質問は読むのが大変です。私が知っているのは、yはローリングオブジェクトであり、シリーズではないので、命令の与えられた場所で呼び出すことはできません。 – Boud

+0

"現在の"行のデータを[curr-6: curr-1]であるため、[:-1]は現在の行を分離しています。私を正しい道に乗せてくれてありがとう。 – MJS

関連する問題