python - Pandas 按窗口范围分组(按类别跟进问题)
问题描述
跟进问题:
我有以下数据表:我想在某个窗口和类别中提取组,例如 windows_size= 1000000
value category
65951649.0 A
59397882.0 A
7633231.0 A
7638485.0 A
65951649.0 B
59397882.0 B
7633231.0 B
7638485.0 B
Output:
value category group
65951649.0 A 1
59397882.0 A 2
7633231.0 A 3
7638485.0 A 3
65951649.0 B 1
59397882.0 B 2
7633231.0 B 3
7638485.0 B 3
是否可以在数据框中执行此操作,或者我必须在单独的数据框中为每个类别执行此操作?
解决方案
使用自定义 lambda 函数:
window_size = 1000000
f = lambda x: x.diff().abs().gt(window_size).cumsum()
df["group"] = df.groupby('category')["value"].apply(f)+1
print (df)
value category group
0 65951649.0 A 1
1 59397882.0 A 2
2 7633231.0 A 3
3 7638485.0 A 3
4 65951649.0 B 1
5 59397882.0 B 2
6 7633231.0 B 3
7 7638485.0 B 3
或 double groupby
,因为需要每组的差异和累积总和:
df["group"] = (df.groupby('category')["value"].diff().abs().gt(window_size)
.groupby(df['category']).cumsum()+1)