通过多列按日期范围分组



我有一个这样的数据帧,

df
col1    col2          col3
A      2021-02-01     P
B      2021-02-12     P
C      2021-02-08     Q
A      2021-02-04     Q
B      2021-02-14     Q
A      2021-02-15     S

col2是pandas的日期时间类型。现在我想对col1和col2上的col3值进行分组(日期日期范围为+- 4天,例如:在2021-02-01和2021-02-04之间的col3值应该针对col1值进行分组)

所以最终的数据帧应该是这样的,
col1    col3
A      [P,Q]
B      [P,Q]
C      [Q]
A      [S]

这可以使用for循环和检查日期时间差异来完成,但是执行时间会很长,所以寻找pandas快捷方式来更有效地完成此操作。

如果需要从组使用的第一天开始每4天定义一次组:

首先为4的整数除法每组的第一个值减去日期创建辅助列,然后将其用于聚合列表:

df['g'] = df['col2'].sub(df.groupby('col1')['col2'].transform('first')).dt.days // 4
df=df.groupby(['g','col1'])['col3'].agg(list).reset_index(level=0,drop=True).reset_index()
print (df)
col1    col3
0    A  [P, Q]
1    B  [P, Q]
2    C     [Q]
3    A     [S]

最新更新