我正在对交易数据进行分析,并希望计算距每个唯一客户最近一次交易以来的天数。
我的初始数据帧(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/