在Pandas中按Mobile_Number分组计算Date列的日期累计差值
按手机号分组计算日期间隔
你需要实现的是对每个手机号的记录按日期排序后,计算当前日期与同组上一条日期的天数差,每组第一条记录的差值设为0。下面用Python的pandas库来完成这个需求:
实现步骤
- 先将
Date列转换为日期格式,确保能进行日期运算 - 按
Mobile_Number分组,对每组的Date进行排序(保证日期顺序正确) - 用
diff()方法计算相邻日期的差值,将每组第一条的缺失差值填充为0,最后转换为整数天数
代码示例
import pandas as pd # 原始数据 raw_data = { 'Mobile_Number': ['0503477334', '0506002884', '0501022162', '0503477334', '0506002884', '0503477334'], 'Date': ['2018-10-28', '2018-10-28', '2018-10-30', '2018-11-05', '2018-11-08', '2018-11-12'] } df = pd.DataFrame(raw_data) # 转换日期格式为可计算的datetime类型 df['Date'] = pd.to_datetime(df['Date']) # 分组计算日期差值 df['Difference'] = df.groupby('Mobile_Number')['Date'].diff().dt.days.fillna(0).astype(int) # 输出结果 print(df)
运行结果
Mobile_Number Date Difference 0 0503477334 2018-10-28 0 1 0506002884 2018-10-28 0 2 0501022162 2018-10-30 0 3 0503477334 2018-11-05 8 4 0506002884 2018-11-08 11 5 0503477334 2018-11-12 7
关键代码说明
pd.to_datetime(df['Date']):把字符串格式的日期转换为pandas的datetime类型,这是日期差值计算的前提groupby('Mobile_Number')['Date'].diff():按手机号分组后,计算当前行与上一行的日期差,返回Timedelta类型结果dt.days:将Timedelta类型的差值转换为天数(数值类型)fillna(0):每组第一条记录没有上一行数据,差值为NaN,这里填充为0astype(int):确保最终的差值是整数格式,符合你的期望结果
内容的提问来源于stack exchange,提问作者dpacman
相关产品推荐
相关产品推荐

