gpt4 book ai didi

python - Pandas 今天的日期和另一个 date_time 列之间的天数差异?

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:17 25 4
gpt4 key购买 nike

我正在对交易数据进行分析,并且想要计算自每个唯一客户的最近一次交易以来已经过去了多长时间。

我的初始数据框 (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

最佳答案

在进行计算之前尝试强制输入交易日期。我知道你说它是日期时间格式,但我的解决方案适用于 pandas 版本 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 - Pandas 今天的日期和另一个 date_time 列之间的天数差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47681184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com