我有一个交易数据的数据集,其中许多交易每天都会发生,但并非所有日子都会有交易。我想为每笔交易计算自交易的最近一天(当天除外)以来的天数。
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])
我想要的是:
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
答案 0 :(得分:2)
使用merge_asof:
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]