#python-3.x #pandas #dataframe
#python-3.x #pandas #фрейм данных
Вопрос:
Я пытаюсь получить частоту дней, сгруппированных по его идентификатору. Итак, я хотел бы знать:
- Общее количество дней для каждого идентификатора и
- частота каждого дня для каждого идентификатора.
Так что это должно выглядеть так:
Кроме того, я попробовал следующее:
number = data.groupby(by=['ID, Date_Time']).size().unstack(fill_value=0)
но это дает мне другой фрейм данных, который я не могу добавить к оригиналу в разделе «данные».
Комментарии:
1. Пожалуйста, предоставьте образец воспроизводимого кода для включения ввода, не вставляйте изображения
Ответ №1:
Я создал простой образец данных, поскольку вы предоставили только скриншот, вам нужно преобразовать дату в формат datetime, а затем сгруппировать по идентификатору и pd.Grouper
по отдельным дням (D). Для итога все, что вам нужно groupby
, это преобразовать количество каждой группы.
data = [[1, "2010-01-01 12:21:46"],[1, "2010-01-01 12:22:46"],[1, "2010-04-02 12:21:46"],[1, "2010-06-06 12:21:46"],[2, "2010-06-06 12:21:46"],[2, "2010-06-06 19:21:46"],[2, "2010-09-06 12:21:46"]]
import pandas as pd
df = pd.DataFrame(data,columns=("id","date_"))
df['date_']= pd.to_datetime(df['date_'],format='%Y-%m-%d %H:%M:%S')
df['freq'] = df.groupby(['id', pd.Grouper(key='date_', freq='D')])['id'].transform('count')
df['total'] = df.groupby('id')['id'].transform('count')
Окончательный вывод вывода будет выглядеть следующим образом:
id date_ freq total
0 1 2010-01-01 12:21:46 2 4
1 1 2010-01-01 12:22:46 2 4
2 1 2010-04-02 12:21:46 1 4
3 1 2010-06-06 12:21:46 1 4
4 2 2010-06-06 12:21:46 2 3
5 2 2010-06-06 19:21:46 2 3
6 2 2010-09-06 12:21:46 1 3