我正在对交易数据进行分析,并希望计算距每个唯一客户最近一次交易以来的天数。

我的初始数据帧(df1)如下所示:

memberId     transactionDate
1111         2017-12-01
2222         2017-12-03
1111         2017-12-05
3333         2017-12-06


TransactionDate为日期时间格式。

这是我的代码尝试使用memberId和自最近交易以来的天数创建一个新的数据框:

import datetime as dt
import pandas as pd

NOW=dt.datetime(2017,12,06)
gb=df1.groupby('memberId')
df2=gb.agg({'transactionDate': lambda x: (NOW-x.max())})


此返回为数据框,如:

memberId     transactionDate
1111         1 days
2222         3 days
3333         0 days


但是我希望天数以整数形式返回,而不是天数。
我第二次尝试解决此问题的方法是:

NOW=dt.datetime(2017,12,06)
gb=df1.groupby('memberId')
df2=gb.agg({'transactionDate': lambda x: (NOW-x.max()).days})


这将返回一个看起来像为transactionDate的纪元时间的内容,并且输出如下所示:

memberId     transactionDate
1111         1970-01-01 00:00:00.000000001
2222         1970-01-01 00:00:00.000000003
3333         1970-01-01 00:00:00.000000000


我认为它正在返回一个以天数为微秒的纪元时间戳。

我如何获得像这样的输出:

memberId     transactionDate
1111         1
2222         3
3333         0

最佳答案

在进行计算之前,请尝试强制设置交易日期。我知道您说的是DateTime格式,但是我的解决方案适用于pandas version 0.20.2

import datetime as dt
import pandas as pd

df1['transactionDate'] = pd.to_datetime(df1['transactionDate']) # <--- changing here
#can also try df1['transactionDate'] = pd.to_datetime(df1['transactionDate'], format='%Y-%M-%d', errors='coerce')
# will try to force the data into this format

#df1['transactionDate'].dtype
#dtype('<M8[ns]')

NOW=dt.datetime(2017,12,6)

# use NOW = dt.datetime.now() if you want to do this programmatically

gb=df1.groupby('memberId')
df2=gb.agg({'transactionDate': lambda x: (NOW-x.max()).days})


输出:

          transactionDate
memberId
1111                    1 #I get 1 for my answer since the max date of 1111 is 2017-12-05
2222                    3
3333                    0

关于python - 今天的日期和另一个date_time列之间的天数之间的 Pandas 差异?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47681184/

10-12 16:46