我有一个这样的数据帧,
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]