Заполнение значений столбца с условием
Есть фрейм со временем посещений пользователями ресурса.
Как заполнить колонку visit, считая все посещения одним пользователем внутри суток одним и тем же визитом?
Для примера заполнил колонку 'exmp_visit' вручную:
import pandas as pd
import datetime
df = pd.DataFrame([['user1', '2020-12-25 14:34:00',1],
['user1', '2020-12-25 14:35:00',1],
['user1', '2020-12-25 14:36:00',1],
['user1', '2020-12-25 15:20:00',1],
['user1', '2020-12-25 15:21:00',1],
['user1', '2020-12-27 10:10:00',2],
['user1', '2020-12-27 10:11:00',2],
['user1', '2020-12-28 20:45:00',3],
['user1', '2020-12-30 20:46:00',4]], columns=['name', 'visit_time', 'exmp_visit'])
df['visit_time'] = pd.to_datetime(df['visit_time'])
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
df["visit"] = (df
.groupby(pd.Grouper(key="visit_time", freq="D"))
.ngroup()
.diff()
.fillna(0)
.ne(0)
.cumsum()+1)
результат:
In [45]: df
Out[45]:
name visit_time exmp_visit visit
0 user1 2020-12-25 14:34:00 1 1
1 user1 2020-12-25 14:35:00 1 1
2 user1 2020-12-25 14:36:00 1 1
3 user1 2020-12-25 15:20:00 1 1
4 user1 2020-12-25 15:21:00 1 1
5 user1 2020-12-27 10:10:00 2 2
6 user1 2020-12-27 10:11:00 2 2
7 user1 2020-12-28 20:45:00 3 3
8 user1 2020-12-30 20:46:00 4 4
PS немного корявенько получилось - попробую сделать элегантнее...
Автор решения: strawdog
→ Ссылка
df["visit"]= df.groupby([df["visit_time"].dt.date, df["name"]]).grouper.group_info[0]+1
name visit_time exmp_visit visit
0 user1 2020-12-25 14:34:00 1 1
1 user1 2020-12-25 14:35:00 1 1
2 user1 2020-12-25 14:36:00 1 1
3 user1 2020-12-25 15:20:00 1 1
4 user1 2020-12-25 15:21:00 1 1
5 user1 2020-12-27 10:10:00 2 2
6 user1 2020-12-27 10:11:00 2 2
7 user1 2020-12-28 20:45:00 3 3
8 user1 2020-12-30 20:46:00 4 4
