DataFrame groupBy, когда каждая группа имеет разницу - PullRequest
1 голос
/ 29 октября 2019

Я пытаюсь groupby несколько столбцов в DataFrame и сохранить только те строки, в которых конкретный столбец изменил значения.

Вот пример набора данных

Id  Type    Size    StoredAt
107  1       20    2019-08-01
107  1       20    2019-08-02
107  1       20    2019-07-31
107  1       20    2019-07-30
107  3       20    2019-07-29
108  1       20    2019-08-01
108  1       20    2019-08-02
108  3       20    2019-07-31

То, что я пытаюсь сделать, это groupby, поэтому у меня есть только две строки, которые показывают, когда тип изменился с 1 на три. Вот как я хочу, чтобы DataFrame выглядело так.

Id  Type    Size    StoredAt
107  1       20    2019-08-01
107  3       20    2019-07-29
108  1       20    2019-08-01
108  3       20    2019-07-31

Все, что у меня есть до сих пор

dataFrame.groupby(['Id', 'Type', 'Size'])['Id', 'Type', 'Size', 'StoredAt']

Что не возвращает того, что я ожидаю.

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Я думаю drop_duplicates работа для вас

df.drop_duplicates(['Id','Type'])
Out[256]: 
    Id  Type  Size    StoredAt
0  107     1    20  2019-08-01
4  107     3    20  2019-07-29
5  108     1    20  2019-08-01
7  108     3    20  2019-07-31
1 голос
/ 29 октября 2019

Похоже, вы просто держите первый пример 1 или 3 в этой группе. В этом случае вы можете использовать следующее для получения желаемого результата:

df.groupby(['Id', 'Type']).first().reset_index()

Предполагается, что ваш фрейм данных отсортирован по столбцу «StoredAt». Если это не так, вам нужно будет выполнить сортировку заранее.

Альтернативой может быть использование drop_duplicates с использованием только поднабора столбцов, которые в этом случае должны быть уникальными комбинациями (Id и Type). Это будет:

df.drop_duplicates(subset=['Id', 'Type'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...