(Pandas) Группируйте по одному столбцу и сохраняйте только те строки, где другой столбец является максимальным - PullRequest
2 голосов
/ 27 февраля 2020

У меня есть pandas фрейм данных с 6 столбцами, два из которых - «дата» и «время». Для каждой даты я хочу сохранить только строки с максимальным значением времени. Например, ниже дата слева, а время справа. Я хочу сохранить все строки, где время 1925.

20200109    1925
20200109    1925
20200109    1925
20200109    1925
20200109    1925
20200109    1925
20200109    1830
20200109    1830
20200109    1830
20200109    1830
20200109    1830

Я пробовал так много решений, сортирующих и использующих групповую обработку, таких как dataframe.groupby('date').apply(lambda x: x.loc[x.time == x.time.max(),['date','time']])

, но это только возвращает столбцы даты и времени. Я хочу, чтобы все 6 столбцов в моем результате

Редактировать: Я хочу сохранить все даты, связанные с максимальным временем.

1 Ответ

1 голос
/ 27 февраля 2020

Попробуйте что-то вроде этого -

dates = [20200109, 20200109, 20200109, 20200109, 20200109, 20200109, 20200109, 20200109, 20200109, 20200109, 20200109, 20200110]
times = [1925, 1925, 1925, 1925, 1925, 1925, 1830, 1830, 1830, 1830, 1830, 1930]
df = pd.DataFrame({'dates':dates, 'times':times})

filt = df.groupby(['dates'])['times'].max().to_frame().reset_index()
final = pd.merge(df,filt,on=['dates','times'])

final 
      dates  times
  0  20200109   1925
  1  20200109   1925
  2  20200109   1925
  3  20200109   1925
  4  20200109   1925
  5  20200109   1925
  6  20200110   1930

Я думаю, даже если вы добавите больше столбцов в df, final будет иметь дополнительные столбцы, как вы пожелаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...