大熊猫在今天和另一个date_time列之间的天数差异?

时间:2017-12-06 18:32:55

标签: python pandas dataframe

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

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

2 个答案:

答案 0 :(得分:1)

在进行计算之前尝试强制执行交易日期。我知道你说它是在DateTime格式,但我的解决方案正在 ngDoCheck() { if(!this.immutable) { let changes = this.differ.diff(this.value); if(changes) { this.handleDataChange(); } } }

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})  

答案 1 :(得分:0)

尝试使用以下代码

 df2.reset_index(inplace=True,drop=True)
 df2['Date2']=df2['Date'].apply(lambda x: x.days)