如何使用 pandas 操作 datetime 对象

How to manipulate datetime objects with pandas

提问人:Lukeee014 提问时间:10/7/2022 最后编辑:Joshua VoskampLukeee014 更新时间:10/7/2022 访问量:90

问:

我对 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 个月内下降,则该帐户将保持等级级别,直到到期日期。"

Python Pandas DataFrame 数据操作

评论

1赞 Juan C 10/7/2022
也许添加一列和 a 并从那里开始工作date_tier_reacheddays_since_reaching_tier
0赞 Rabinzel 10/7/2022
对于您的 Tiers 函数,请查看 pd.cut 以将您的 Tier 应用于不同范围内的数字。与您的问题相关:对我来说,这听起来可能很好用 pd.cummax
0赞 Joshua Voskamp 10/7/2022
在你的定义中,什么是?它是全球性的吗?Tiersdf3
0赞 Lukeee014 10/7/2022
是的。df3 是上面快照中的数据帧
1赞 Joshua Voskamp 10/7/2022
你能提供(消毒的)吗?最小的可重复示例?您提供的示例数据帧似乎在所有日期都使客户处于第 1 层。

答: 暂无答案