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正确:)这正是我所想象的。在手机上回答问题是最糟糕的。我放弃了这一点,只是只读、向上投票、评论、打字。这正是我所想象的。在我的手机上回答问题是最糟糕的,但我放弃了这一点,只是只读、向上投票、评论和打字错误。