python 基于历史数据(不包括记录的当前日期)聚合要素

vawmfj5a  于 2023-02-28  发布在  Python
关注(0)|答案(1)|浏览(109)

我想知道是否有人可以帮助或指出我在正确的方向。我相当新的编程,所以任何帮助表示感谢
我目前正在为我的一个项目做一些特征提取,并试图创建一些聚合器特征。
我试图创建的一个特殊功能只能考虑历史记录,而不包括实际记录的日期。到目前为止,我一直在使用groupby和cumcount,但我很难得到我想要的。请看下面

df['Cum Count'] = df.sort_values('Time').groupby(['ID']).cumcount()

| 时间|识别号|累计计数|预期结果|
| - ------|- ------|- ------|- ------|
| 2016年3月4日15:35|小行星1234567|无|无|
| 2016年5月4日14:40|小行星1234567|1个|1个|
| 2016年5月4日17:30|小行星1234567|第二章|1个|
| 2016年8月4日17:05|小行星1234567|三个|三个|
| 2016年8月4日18:10|小行星1234567|四个|三个|
| 2016年9月4日17:45|小行星1234567|五个|五个|
| 2016年4月15日17:25|小行星1234567|六个|六个|
| 2016年4月15日19:55|小行星1234567|七|六个|
| 2016年4月20日17:25|小行星1234567|八个|八个|
| 2016年4月20日19:25|小行星1234567|九|八个|
| 2016年4月22日18:10|小行星1234567|十个|十个|
| 2016年4月25日14时15分|小行星1234567|十一|十一|
| 2016年4月25日14时45分|小行星1234567|十二|十一|
| 2016年4月27日18:40|小行星1234567|十三|十三|
| 2016年4月28日18:05|小行星1234567|十四|十四|
| 2016年4月5日14时45分|小行星1234567|十五|十五|
| 2016年4月5日15:15|小行星1234567|十六|十五|

krcsximq

krcsximq1#

试试看:

# 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

相关问题