在Pandas中按ex_one分组实现日期min/max及计数聚合
解决Pandas按列分组并添加聚合字段的需求
没问题,我来帮你实现这个需求——按ex_one列分组后,给原DataFrame的每一行添加上对应分组的最大日期、最小日期以及分组出现次数。下面是具体的步骤和代码:
第一步:确保日期字段类型正确
首先要把fake_date转换成datetime类型,这样才能正确计算日期的最大值和最小值:
import pandas as pd # 构造你的示例DataFrame data = { 'ex_one': [228055, 228056, 228050, 228055, 228059], 'ex_two': [231908, 228899, 230029, 230564, 230548], 'weight': [1, 1, 1, 1, 1], 'fake_date': ['2004-12-17', '2000-02-26', '2003-01-27', '2001-07-25', '2002-05-04'] } df = pd.DataFrame(data) # 转换日期类型(如果你的数据已经是datetime类型,可以跳过这一步) df['fake_date'] = pd.to_datetime(df['fake_date'])
第二步:用transform添加聚合字段
这里用groupby结合transform方法,它的核心优势是能把分组后的聚合结果映射回原DataFrame的每一行,完美保留原有的所有列数据:
# 计算每个分组的最大日期 df['max_date'] = df.groupby('ex_one')['fake_date'].transform('max') # 计算每个分组的最小日期 df['min_date'] = df.groupby('ex_one')['fake_date'].transform('min') # 计算每个分组的出现次数(频率) df['frequency'] = df.groupby('ex_one')['ex_one'].transform('count')
最终结果
运行上面的代码后,你会得到完全符合预期的目标DataFrame:
ex_one ex_two weight fake_date max_date min_date frequency 0 228055 231908 1 2004-12-17 2004-12-17 2001-07-25 2 1 228056 228899 1 2000-02-26 2000-02-26 2000-02-26 1 2 228050 230029 1 2003-01-27 2003-01-27 2003-01-27 1 3 228055 230564 1 2001-07-25 2004-12-17 2001-07-25 2 4 228059 230548 1 2002-05-04 2002-05-04 2002-05-04 1
可以看到,ex_one=228055的分组对应的max_date是2004-12-17,min_date是2001-07-25,frequency是2,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者lpt
相关产品推荐
相关产品推荐

