Пометка большого набора данных, когда уникальные идентификаторы перестают отображаться в Python - PullRequest
0 голосов
/ 06 февраля 2019

Это довольно специфический вопрос, но у меня большой набор данных, превышающий 1 ГБ.Формат этих данных выглядит следующим образом:

Name         ID      OP Date      OP Hour        Gen         Heat
Jann         1       2001-01-01   1              10          0
Jann         1       2001-01-01   2              3           1
.
.
Jann         1       2001-01-01   24             13          3
Jann         2       2001-01-01   1              30          10
Jann         2       2001-01-01   3              32          11
.
.
Kay          1A      2002-01-01   1              0           12
Kay          1A      2002-01-01   2              2           22
.
.
.
.
.
Jann         1       2018-01-01   1              26          8
Jann         1       2018-01-01   2              32          21

Иногда Name иногда появляется не в начале набора данных (2001-01-01) и / или иногда Nameперестанет появляться в наборе данных все вместе на определенном OP Date.

Также иногда появляется Name, но только определенный ID из этого Name исчезает.

Я хочу знать, когда определенные Name и ID начинаются и заканчиваются в этом наборе данных.

Например Jann ID 1и Jann ID 2 оба начинаются с OP Date 2001-01-01, но Jann ID 2 не отображается в OP Date 2018-01-01.Кроме того, Kay ID 1A начинается с 2002-01-01, но перестает отображаться где-то до 2018-01-01.

Мой желаемый вывод будет что-то вроде кадра данных:

Name         ID      OP Start Date     OP EndDate
Jann         1       2001-01-01        2018-01-01
Jann         2       2001-01-01        SOME OP DATE
Kay          1A      2002-01-01        SOME OP DATE

Есть ли способсделать это легко?

1 Ответ

0 голосов
/ 06 февраля 2019

Вы можете попробовать groupby и agg (или aggregate, это та же функция), чтобы применить first и last к OP Date для каждого имени / идентификаторакомбо.Это требует, чтобы df был отсортирован по дате OP (отсюда использование sort_values)

# convert to datetime first if not done already
df['OP Date'] = pd.to_datetime(df['OP Date'])

df.sort_values('OP Date').groupby(['Name', 'ID'])['OP Date'].agg(['first', 'last'])


             first       last
Name ID                      
Jann 1  2001-01-01 2018-01-01
     2  2001-01-01 2001-01-01
Kay  1A 2002-01-01 2002-01-01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...