Найти комбинированное максимальное значение - PullRequest
0 голосов
/ 21 октября 2019

У меня есть следующий DataFrame:

{'date': '2019-10-21', 'hour': 3, 'id': '1'},
{'date': '2019-10-21', 'hour': 4, 'id': '1'},
{'date': '2019-10-20', 'hour': 0, 'id': '1'},
{'date': '2019-10-20', 'hour': 1, 'id': '1'},
{'date': '2019-10-21', 'hour': 0, 'id': '1'},
{'date': '2019-10-20', 'hour': 0, 'id': '1'},
{'date': '2019-10-19', 'hour': 5, 'id': '1'},
{'date': '2019-10-20', 'hour': 0, 'id': '2'},
{'date': '2019-10-20', 'hour': 0, 'id': '3'}

Мне нужно найти для каждого идентификатора самую последнюю дату и час, поэтому, например, для id = 1 я хочу 2019-10-21 и 4, пока я получаюправильная дата, но час = 5

1 Ответ

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

Используйте DataFrame.sort_values по всем 3 столбцам и удаляйте дубликаты по DataFrame.drop_duplicates по столбцу id:

L = [{'date': '2019-10-21', 'hour': 3, 'id': '1'},
{'date': '2019-10-21', 'hour': 4, 'id': '1'},
{'date': '2019-10-20', 'hour': 0, 'id': '1'},
{'date': '2019-10-20', 'hour': 1, 'id': '1'},
{'date': '2019-10-21', 'hour': 0, 'id': '1'},
{'date': '2019-10-20', 'hour': 0, 'id': '1'},
{'date': '2019-10-19', 'hour': 5, 'id': '1'},
{'date': '2019-10-20', 'hour': 0, 'id': '2'},
{'date': '2019-10-20', 'hour': 0, 'id': '3'}]

df = pd.DataFrame(L)
df['date'] = pd.to_datetime(df['date'])

df = df.sort_values(['id','date','hour'], ascending=[True, False, False]).drop_duplicates('id')
print (df)
        date  hour id
1 2019-10-21     4  1
7 2019-10-20     0  2
8 2019-10-20     0  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...