Отфильтровывать дублирующиеся данные в фрейме данных pandas

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть фрейм данных с 3 столбцами [‘id’, ‘city’, ‘time’]:

    city  id       time
0   CA   1   2019-01-01 05:34:21
1   CA   1   2019-01-01 08:10:21
2   CA   1   2019-02-01 06:10:21
3   NY   1   2019-02-01 16:10:21
4   NY   1   2019-02-01 18:10:21
5   CA   1   2019-02-01 22:10:21
6   CA   1   2019-02-02 02:10:21
  

Я столкнулся с проблемой, из-за которой требуется отфильтровать дублирующиеся данные по «городу», сохраняя при этом наименьшее «время», например:

    city   id       time
0   CA    1    2019-01-01 05:34:21
1   NY    1    2019-02-01 16:10:21
2   CA    1    2019-02-01 22:10:21
  

Поскольку набор данных значительно велик, было бы лучше не использовать в нем циклы for. Как я могу это сделать?

Большое вам спасибо.

Ответ №1:

Вы можете использовать:

 df_new=df.groupby([df.city.ne(df.city.shift()).cumsum(),'city'],as_index=False).min()
print(df_new)

  city  id                 time
0   CA   1  2019-01-01 05:34:21
1   NY   1  2019-02-01 16:10:21
2   CA   1  2019-02-01 22:10:21
  

Комментарии:

1. Ух ты! Это то, чего я ждал: D

2. @meW что именно? 😀

3. Застрял при создании df.city.ne(df.city.shift()).cumsum() .

4. @ChrisLiu С удовольствием ..!! рад, что смог помочь. 🙂