Python 2.7 使用Pandas从事务数据中的上一个日期获取天数

Python 2.7 使用Pandas从事务数据中的上一个日期获取天数,python-2.7,pandas,Python 2.7,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(TESTDAT

我有一个事务数据集,其中每天都会发生许多事务,但并非所有的日子都会有事务。我想计算每个交易的天数,从过去最接近的一天(不包括当前一天)算起

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
使用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]
使用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]

我不能测试这个,但我认为你可以使用pd.merge\u asof。也许其他人可以搞乱这件事,给我一个建议answer@piRSquared正确:)我无法测试这一点,但我认为您可以使用pd.merge\u asof。也许其他人可以搞乱这件事,给我一个建议answer@piRSquared正确:)这正是我所想象的。在手机上回答问题是最糟糕的。我放弃了这一点,只是只读、向上投票、评论、打字。这正是我所想象的。在我的手机上回答问题是最糟糕的,但我放弃了这一点,只是只读、向上投票、评论和打字错误。