根据不包括当前记录日期的历史数据聚合特征

问题描述 投票:0回答:1

想知道这里是否有人可以帮助或指出正确的方向。我对编程还很陌生,所以感谢任何帮助

我目前正在为我的一个项目做一些特征提取,我正在尝试创建一些聚合器特征。

我试图创建的一个特定功能只能考虑历史记录,不包括实际记录的日期。到目前为止,我一直在使用 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
python group-by aggregate-functions feature-extraction
1个回答
0
投票

尝试:

# 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
© www.soinside.com 2019 - 2024. All rights reserved.