提问人:Lukeee014 提问时间:10/7/2022 最后编辑:Joshua VoskampLukeee014 更新时间:10/7/2022 访问量:90
如何使用 pandas 操作 datetime 对象
How to manipulate datetime objects with pandas
问:
我对 python 比较陌生,我的工作需要我编写一个脚本来将客户分类为层。
这是我需要实现的逻辑:
等级资格 : 现在,帐户差旅支出将按 12 个月的滚动周期进行跟踪,从而使客户能够立即获得等级级别的资格,并在达到等级级别时享受福利。 当达到等级级别时,它将在 12 个月内得到保护。 如果达到更高的等级,该帐户将立即升级到更高的等级,为期 12 个月。 如果帐户的差旅支出在 12 个月内下降,则该帐户将保持等级级别,直到到期日期。 帐户将在 12 个月期限结束时重新评估,以获得新的合格状态。 收入计算按天计算,延迟 7 天。
我正在使用 SQLAlchemy 从我们的数据库中提取数据,并使用 pandas 将其格式化为数据帧。我过滤了数据帧以仅显示一个客户的交易。 然后,我使用熊猫滚动函数来计算 12 个月的滚动总和。
此时,数据帧如下所示:
tot_rev_base rolling
DATE
2022-08-21 0.00 139558.47
2022-08-22 0.00 139558.47
2022-08-23 3902.93 140314.65
2022-08-24 467.60 138790.25
2022-08-25 0.00 138235.25
2022-08-26 1265.10 135559.90
2022-08-27 0.00 134676.00
2022-08-28 0.00 134676.00
2022-08-29 0.00 134676.00
2022-08-30 664.25 134935.70
2022-08-31 1712.40 132872.30
2022-09-01 458.70 131291.50
2022-09-02 802.00 131305.75
2022-09-03 0.00 131305.75
2022-09-04 0.00 128518.30
2022-09-05 0.00 128518.30
2022-09-06 0.00 128518.30
2022-09-07 655.70 128626.60
2022-09-08 1238.25 129864.85
我编写了一个简单的迭代,根据当天的滚动总和添加一个具有 Tier 级别的列,其中“row”包含日期作为索引、收入和滚动总和:
def Tiers(row):
date = row[0]
revenue = row[1][0]
rolling = row[1][1]
if rolling < 10000:
df3.loc[date,'tier'] = 0
elif rolling < 150000:
df3.loc[date,'tier'] = 1
elif rolling < 300000:
df3.loc[date,'tier'] = 2
elif rolling < 500000:
df3.loc[date,'tier'] = 3
elif rolling > 500000:
df3.loc[date,'tier'] = 4
目前为止,一切都好。我遇到的问题是实施“当达到等级级别时,它将在 12 个月内得到保护。如果达到更高的等级,该帐户将立即升级到更高的等级,为期 12 个月。如果帐户的差旅支出在 12 个月内下降,则该帐户将保持等级级别,直到到期日期。"
答: 暂无答案
评论
date_tier_reached
days_since_reaching_tier
pd.cut
以将您的 Tier 应用于不同范围内的数字。与您的问题相关:对我来说,这听起来可能很好用pd.cummax
?Tiers
df3