想知道这里是否有人可以帮助或指出正确的方向。我对编程还很陌生,所以感谢任何帮助
我目前正在为我的一个项目做一些特征提取,我正在尝试创建一些聚合器特征。
我试图创建的一个特定功能只能考虑历史记录,不包括实际记录的日期。到目前为止,我一直在使用 groupby 和 cumcount,但我正在努力获得我想要的东西。请看下文
df['Cum Count'] = df.sort_values('Time').groupby(['ID']).cumcount()
时间 | ID | 射精次数 | 想要的结果 |
---|---|---|---|
03/04/2016 15:35 | 1234567 | 0 | 0 |
05/04/2016 14:40 | 1234567 | 1 | 1 |
2016/05/04 17:30 | 1234567 | 2 | 1 |
08/04/2016 17:05 | 1234567 | 3 | 3 |
08/04/2016 18:10 | 1234567 | 4 | 3 |
09/04/2016 17:45 | 1234567 | 5 | 5 |
15/04/2016 17:25 | 1234567 | 6 | 6 |
15/04/2016 19:55 | 1234567 | 7 | 6 |
20/04/2016 17:25 | 1234567 | 8 | 8 |
20/04/2016 19:25 | 1234567 | 9 | 8 |
22/04/2016 18:10 | 1234567 | 10 | 10 |
25/04/2016 14:15 | 1234567 | 11 | 11 |
25/04/2016 14:45 | 1234567 | 12 | 11 |
27/04/2016 18:40 | 1234567 | 13 | 13 |
28/04/2016 18:05 | 1234567 | 14 | 14 |
04/05/2016 14:45 | 1234567 | 15 | 15 |
04/05/2016 15:15 | 1234567 | 16 | 15 |
尝试:
# transform Time to datetime (if necessary):
df['Time'] = pd.to_datetime(df['Time'])
df['desired result 2'] = df.groupby(['ID', df['Time'].dt.date], sort=False)['Cum Count'].transform('first')
print(df)
印花:
Time ID Cum Count desired result desired result 2
0 2016-03-04 15:35:00 1234567 0 0 0
1 2016-05-04 14:40:00 1234567 1 1 1
2 2016-05-04 17:30:00 1234567 2 1 1
3 2016-08-04 17:05:00 1234567 3 3 3
4 2016-08-04 18:10:00 1234567 4 3 3
5 2016-09-04 17:45:00 1234567 5 5 5
6 2016-04-15 17:25:00 1234567 6 6 6
7 2016-04-15 19:55:00 1234567 7 6 6
8 2016-04-20 17:25:00 1234567 8 8 8
9 2016-04-20 19:25:00 1234567 9 8 8
10 2016-04-22 18:10:00 1234567 10 10 10
11 2016-04-25 14:15:00 1234567 11 11 11
12 2016-04-25 14:45:00 1234567 12 11 11
13 2016-04-27 18:40:00 1234567 13 13 13
14 2016-04-28 18:05:00 1234567 14 14 14
15 2016-04-05 14:45:00 1234567 15 15 15
16 2016-04-05 15:15:00 1234567 16 15 15
如果你只想要一个组号,你可以使用
.ngroup()
:
df['group number'] = df.groupby(['ID', df['Time'].dt.date], sort=False).ngroup()
print(df)
印花:
Time ID Cum Count desired result group number
0 2016-03-04 15:35:00 1234567 0 0 0
1 2016-05-04 14:40:00 1234567 1 1 1
2 2016-05-04 17:30:00 1234567 2 1 1
3 2016-08-04 17:05:00 1234567 3 3 2
4 2016-08-04 18:10:00 1234567 4 3 2
5 2016-09-04 17:45:00 1234567 5 5 3
6 2016-04-15 17:25:00 1234567 6 6 4
7 2016-04-15 19:55:00 1234567 7 6 4
8 2016-04-20 17:25:00 1234567 8 8 5
9 2016-04-20 19:25:00 1234567 9 8 5
10 2016-04-22 18:10:00 1234567 10 10 6
11 2016-04-25 14:15:00 1234567 11 11 7
12 2016-04-25 14:45:00 1234567 12 11 7
13 2016-04-27 18:40:00 1234567 13 13 8
14 2016-04-28 18:05:00 1234567 14 14 9
15 2016-04-05 14:45:00 1234567 15 15 10
16 2016-04-05 15:15:00 1234567 16 15 10