【问题标题】:Python script to filter last 12 months of data in each category用于过滤每个类别中过去 12 个月数据的 Python 脚本
【发布时间】:2021-07-04 06:11:15
【问题描述】:

我有日期框架,我必须根据过去 12 个月的数据对值进行子集化。每个类别的行数不相等,即频率不一样。因此,我们必须将开始日期作为该类别的最新日期和 12 个月前的值相加。现在这个值的数量可以不同,比如可以有一个值到 12 个值等等,即它不是固定的

以下是样本数据:

RIC         DIVIDENDEXDATE       Adjusted 
==============================================
TECL.P      12/22/2020             0
TECL.P      9/22/2020              0
TECL.P      6/23/2020              0
TECL.P      3/24/2020              0.019
TECL.P      12/23/2019             0.111
TECL.P      9/24/2019              0.007
CSML.OQ     12/30/2020             0.146
CSML.OQ     9/24/2020              0.069
CSML.OQ     6/24/2020              0.62
CSML.OQ     3/25/2020              0.018
CSML.OQ     12/30/2019             0.0657
CSML.OQ     9/24/2019              0.6585

这里每个组都是 RIC,并且必须从 DIVIDENDEXDATE 中选择日期。我们应该保留介于每个 RIC 的最大/最新日期与最新日期后 12 个月内的任何行之间的日期。

我尝试了以下代码

df = data2.set_index('DividendExDate').last('12M')

但它不起作用

【问题讨论】:

    标签: python pandas subset


    【解决方案1】:

    您应该首先将您的日期列转换为可以理解排序的正确日期格式:

    import pandas as pd
    data2.DIVIDENDEXDATE = pd.to_datetime(data2.DIVIDENDEXDATE)
    

    然后,根据DIVIDENDEXDATE 与组内最大日期之间的距离过滤每个组中的行:

    from dateutil.relativedelta import relativedelta
    filtered_df = (data2.groupby('RIC')
                        .apply(lambda g: g[g['DIVIDENDEXDATE'] >= (g['DIVIDENDEXDATE'].max()-relativedelta(years=1))])
                        .reset_index(level=0, drop=True)) 
    

    我在回答你的问题吗?

    【讨论】:

    • 是的,这是我所期待的,但是最后缺少括号,休息很好
    • 糟糕,粘贴错误,正在修复此问题。如果解决了问题,请考虑接受答案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2022-09-27
    • 2010-10-11
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多