如何在Pandas中统计DataFrame跨日期重复的order_id数量
相邻日期重复Order_id统计实现方案
步骤1:数据初始化与预处理
先构造示例DataFrame,并将日期列转换为datetime类型,保证后续日期排序和对比的准确性:
import pandas as pd # 构造示例数据 data = { 'Order_id': [1,2,3,4,5,6,2,1,2,7], 'Order_date': ['2022-11-16','2022-11-16','2022-11-16','2022-11-16','2022-11-17','2022-11-17','2022-11-17','2022-11-17','2022-11-18','2022-11-18'] } df = pd.DataFrame(data) # 将日期列转换为datetime格式 df['Order_date'] = pd.to_datetime(df['Order_date'])
步骤2:提取每日唯一Order_id集合
按日期分组,提取每天的唯一Order_id并转换为集合(集合可快速计算交集):
# 分组后获取每日唯一Order_id的集合 daily_orders = df.groupby('Order_date')['Order_id'].unique().apply(set) # 确保按日期顺序排列 daily_orders = daily_orders.sort_index()
步骤3:计算相邻日期的重复Order_id数量
遍历相邻日期对,通过集合交集操作统计重复的Order_id数量,并格式化输出结果:
for idx in range(1, len(daily_orders)): prev_day = daily_orders.index[idx-1] curr_day = daily_orders.index[idx] # 计算两天Order_id的交集长度 repeat_count = len(daily_orders[prev_day] & daily_orders[curr_day]) # 格式化日期为指定字符串格式 prev_day_str = prev_day.strftime('%Y年%m月%d日') curr_day_str = curr_day.strftime('%Y年%m月%d日') # 输出结果 print(f"{repeat_count} - {prev_day_str}至{curr_day_str}有{repeat_count}个order_id来自前一天")
运行结果
执行上述代码后,将得到预期输出:
2 - 2022年11月16日至2022年11月17日有2个order_id来自前一天 1 - 2022年11月17日至2022年11月18日有1个order_id来自前一天
内容的提问来源于stack exchange,提问作者pankaj sharma
相关产品推荐
相关产品推荐

