日期间隔内的行数,取自数据框本身(pandas)

问题描述 投票:0回答:1

我有以下数据框:

Name    Date
Alice   2023-01-01
Alice   2023-02-01
Bob     2023-02-15
Alice   2023-03-01
Bob     2023-03-20
Alice   2023-04-01

我想计算在Date之前的过去3个月内,每个Name出现了多少次。所以,我期望得到以下输出:


    Name    Date        Date_3_Months_Ago   N_Past_3_Months
0   Alice   2023-01-01  2022-10-01          1
1   Alice   2023-02-01  2022-11-01          2
3   Alice   2023-03-01  2022-12-01          3
5   Alice   2023-04-01  2023-01-01          4
2   Bob     2023-02-15  2022-11-15          1
4   Bob     2023-03-20  2022-12-20          2

我可以使用 apply 函数或 for 循环获得此输出。但是,我对矢量化解决方案感兴趣,因为我的数据框非常大。

python sql pandas dataframe group-by
1个回答
0
投票

我使用 pandas Dateoffset 从 df['Date'] 中减去 3 个月,并使用 groupby 和 cumcount 来计算每个名称的条目,+ 1 因为 cumcount 从 0 开始计数

df = df.sort_values(by=['Name', 'Date'])
df['Date'] = pd.to_datetime(df['Date'])
df['Date_3_Months_Ago'] = df['Date'] - pd.DateOffset(months=3)
df['N_Past_3_Months'] = df.groupby('Name').cumcount() + 1

最终结果:

    Name    Date        Date_3_Months_Ago   N_Past_3_Months
0   Alice   2023-01-01  2022-10-01          1
1   Alice   2023-02-01  2022-11-01          2
3   Alice   2023-03-01  2022-12-01          3
5   Alice   2023-04-01  2023-01-01          4
2   Bob     2023-02-15  2022-11-15          1
4   Bob     2023-03-20  2022-12-20          2
© www.soinside.com 2019 - 2024. All rights reserved.