2016-11-08 4 views
0

で始まる、私は私のVARSのパンダのデータフレーム1を持っているが、次のようになります。はパンダでCUMSUM(一種の)負またはゼロ

user, time, used 
1, 2015-01-01, 0 
1, 2015-02-01, 0 
1, 2015-03-01, 0 
1, 2015-04-01, 1 
1, 2015-05-01, 0 
2, 2015-01-01, 0 
2, 2015-02-01, 1 
2, 2015-03-01, 0 

変数は、基本的に第1の時間のことを示した指標である「使用します」ユーザーが表示されます。私はこれを行うには良い方法を考えることはできません

user, time, used, new 
1, 2015-01-01, 0, -3 
1, 2015-02-01, 0, -2 
1, 2015-03-01, 0, -1 
1, 2015-04-01, 1, 0 
1, 2015-05-01, 0, 1 
2, 2015-01-01, 0, -1 
2, 2015-02-01, 1, 0 
2, 2015-03-01, 0, 1 

:私は何をしようとしていることは何ヶ月前と最初の使用後、私たちはこのようにあることを示し、新しい変数を作成することです。

答えて

0

良い方法があるかどうかわかりません。この方法ではは本当にですが、それは動作するように着陸したものです。

df['test']=1 
df.groupby('acctnum')['test'].cumsum() 
df['new']=0 
for acctnum in df['acctnum'].unique(): 
    df['test2']=df[df['acctnum']==acctnum].loc[::-1,'test'].cumsum() 
    df['test3']=df[df['acctnum']==acctnum]['test'].cumsum() 
    df['before']=1-df[df['acctnum']==acctnum]['after'] 
    r=df[df['acctnum']==acctnum]['after'].sum()-10 
    df['test4']=(df[df['acctnum']==acctnum]['test3']-df[df['acctnum']==acctnum]['test2'])/2 
    df['test5']=df[df['acctnum']==acctnum]['test4']+r 
    df['new']=df['new']+df['test5'].fillna(0) 

もっと速い方法があれば、私はそれについて聞きたいと思います。

+0

10行目は、ユーザーあたりの中間データポイント数で、ハードコードされています。これは私の問題に非常に特有のものであり、決して一般的なものではありませんでした。 – Ryan

関連する問題