numpy 在Python中计算最近、频率和货币

zzwlnbp8  于 2023-03-23  发布在  Python
关注(0)|答案(1)|浏览(91)

我正在用Python做RFM(recency,f,monetary)analyssis数据。我购买数据集的最后发票日期是2022-12-30(2022年12月30日)。
数据集看起来像这样:
| 客户名称|侵入日期|岁入|
| - ------|- ------|- ------|
| 美国广播公司|2022年1月17日|五一七|
| 吉|2022年12月30日|一万五千一百一万一千一百一十一|
从数据集中,我首先计算了最后一次购买日期:
code: df['invdate'].max()
output: Timestamp('2022-12-30 00:00:00')
然后我计算了最近度:
第一步:我记下了最后的发票日期,并将该日期设置为“now”now=dt.date(2022,12,30)
print(now)
output for now: 2022-12-30
第二步:最后的最近代码:
recency_df['Recency'] = recency_df['invdate'].apply(lambda x: (now - x).days)
但结果似乎是错误的:
| 客户名称|侵入日期|岁入|近因|
| - ------|- ------|- ------|- ------|
| 美国广播公司|2022年1月17日|五一七|三四七|
| 吉|2022年12月30日|一万五千一百一万一千一百一十一|无|
如果客户“ghi”在2022年12月30日买入,收益最大,那么它的最近度不应该是最高的吗?如果我使用了错误的最近度计算,请您提出建议。

omvjsjqw

omvjsjqw1#

客户“ghi”的最近时间计算不正确的原因是,数据集中的日期格式是月/日/年(MM/DD/YYYY),而不是日/月/年(DD/MM/YYYY)。因此,用于计算最近时间的代码是以不正确的方式从当前日期中减去发票日期。
要解决这个问题,您应该使用pandas的to_datetime函数将日期列转换为日期时间格式,并将格式参数设置为“%m/%d/%Y”。这将确保日期被正确地解释为月/日/年。

# convert date column to datetime format
df['invdate'] = pd.to_datetime(df['invdate'], format='%m/%d/%Y')

# calculate recency
now = dt.date(2022,12,30)
df['Recency'] = (now - df['invdate']).dt.days

相关问题