2017-02-03 15 views
0

トランザクションデータのデータセットがあります。多くのトランザクションが毎日発生しますが、すべてのトランザクションでトランザクションが発生するわけではありません。私は、トランザクションごとに、過去の最も近い日(現在の日を除く)からの日数を各トランザクションについて計算したいと思います。私が欲しいものPandasを使用してトランザクションデータの前日から日数を取得

from StringIO import StringIO 

import pandas as pd 

TESTDATA=StringIO("""time,message 
2015-02-01,x 
2015-02-01,z 
2015-02-02,x 
2015-02-04,y 
2015-02-04,z 
""") 

s = pd.read_csv(TESTDATA, sep=",",parse_dates=[0]) 

は次のとおりです。merge_asofで

2015-02-01,x,nan 
2015-02-01,z,nan 
2015-02-02,x,1 
2015-02-04,y,2 
2015-02-04,z,2 
+1

私はこれをテストすることはできませんが、私はあなたがpd.merge_asofを使用することができると思います。多分誰かがそれを混乱させ、答えを – piRSquared

+0

@ piRSquared correct :) – Boud

答えて

2

s['time2'] = s['time'] 
df = pd.merge_asof(s, s, left_on='time', right_on='time', allow_exact_matches=False) 
df 
Out[328]: 
     time message_x time2_x message_y time2_y 
0 2015-02-01   x 2015-02-01  NaN  NaT 
1 2015-02-01   z 2015-02-01  NaN  NaT 
2 2015-02-02   x 2015-02-02   z 2015-02-01 
3 2015-02-04   y 2015-02-04   x 2015-02-02 
4 2015-02-04   z 2015-02-04   x 2015-02-02 

df.time - df.time2_y 
Out[330]: 
0  NaT 
1  NaT 
2 1 days 
3 2 days 
4 2 days 
dtype: timedelta64[ns] 
+0

それはまさに私が想像していたものです。私の電話で質問に答えるのが最悪です。 – piRSquared

+0

@piRSquared私はそれを断念しました、ただ読書のみ、upvote、コメント、誤植。 – Boud

関連する問題