如何在Pandas Dataframe中实现带日期限制的去重累计计数?
统计过去720天内的活跃客户数
给定如下销售数据Dataframe:
data = { 'client_id': ['01419', '1444', '346344', '83204', '8370660'], 'order_date': ['2022-04-06', '2021-05-22', '2022-11-10', '2023-02-22', '2019-06-11'], 'order_id': [200140, 146977, 249517, 260853, 91743], 'name': ['TACIANA', 'ROSANA', 'MARIA', 'ERIVAL', 'JOAO'] }
需要新增一列active_base,对每一行统计当前订单日期过去720天内(含当天)有购买记录的、排除当前客户的去重客户ID数量,期望输出如下:
df2 = { 'client_id': ['01419', '1444', '346344', '83204', '8370660'], 'order_date': ['2022-04-06', '2021-05-22', '2022-11-10', '2023-02-22', '2019-06-11'], 'order_id': [200140, 146977, 249517, 260853, 91743], 'name': ['TACIANA', 'ROSANA', 'MARIA', 'ERIVAL', 'JOAO'], 'active_base': [1, 1, 2, 3, 0] }
实现步骤
导入依赖并创建Dataframe
导入pandas库,将原始数据转换为Dataframe:import pandas as pd data = { 'client_id': ['01419', '1444', '346344', '83204', '8370660'], 'order_date': ['2022-04-06', '2021-05-22', '2022-11-10', '2023-02-22', '2019-06-11'], 'order_id': [200140, 146977, 249517, 260853, 91743], 'name': ['TACIANA', 'ROSANA', 'MARIA', 'ERIVAL', 'JOAO'] } df = pd.DataFrame(data)转换日期类型
将order_date列转换为datetime格式,方便后续时间范围计算:df['order_date'] = pd.to_datetime(df['order_date'])定义计算函数并应用
编写函数对每一行计算目标值,再通过apply方法批量处理:def calculate_active_base(row, df): # 计算时间范围:当前日期往前推720天至当前日期 start_date = row['order_date'] - pd.Timedelta(days=720) end_date = row['order_date'] # 筛选该时间范围内的所有订单 date_mask = (df['order_date'] >= start_date) & (df['order_date'] <= end_date) # 获取范围内的去重客户ID unique_clients = df.loc[date_mask, 'client_id'].unique() # 计数:去重客户数减去当前客户(如果存在) active_count = len(unique_clients) - (1 if row['client_id'] in unique_clients else 0) return active_count # 新增active_base列 df['active_base'] = df.apply(lambda x: calculate_active_base(x, df), axis=1)查看结果
执行代码后,df将包含新增列,输出结果与期望一致:print(df)
输出:
client_id order_date order_id name active_base 0 01419 2022-04-06 200140 TACIANA 1 1 1444 2021-05-22 146977 ROSANA 1 2 346344 2022-11-10 249517 MARIA 2 3 83204 2023-02-22 260853 ERIVAL 3 4 8370660 2019-06-11 91743 JOAO 0
内容的提问来源于stack exchange,提问作者matheusppedroso
相关产品推荐
相关产品推荐

