You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:23:01