#python #pandas #dataframe
Вопрос:
В настоящее время у меня есть фрейм данных, как показано ниже:
import pandas as pd import numpy as np d = {'name': ['a', 'a','a','b','b','b','c','c','c'], 'Year': ['2000', '2010', '2020', '2000', '2010', '2020', '2000', '2010', '2020'], 'v1': [np.NaN, np.NaN, np.NaN, 41, 51, 61, 71, 81, 91], 'v2': [12, 22, 32, np.NaN, 52, np.NaN, 72, 82, 92], 'v3': [13, 23, 33, 43, 53, 63, np.NaN, 83, np.NaN]} df = pd.DataFrame(d) df name Year v1 v2 v3 a 2000 NaN 12 13 a 2010 NaN 22 23 a 2020 NaN 32 33 b 2000 41 NaN 43 b 2010 51 52 53 b 2020 61 NaN 63 c 2000 71 72 NaN c 2010 81 82 83 c 2020 91 92 NaN
И я пытаюсь просто получить последнюю запись, доступную для каждого человека, следующим образом:
name v1 v2 v3 a NaN 32 33 b 61 52 63 c 91 92 83
Есть ли какой-нибудь способ, которым я могу этого достичь?
Ответ №1:
Просто используйте groupby
last
и as_index=False
в качестве параметра для groupby
:
df.groupby('name', as_index=False).last()
В качестве альтернативы, если вы знаете, что последний год "2020"
:
df.query('Year == "2020"')
выход:
name Year v1 v2 v3 0 a 2020 NaN 32.0 33.0 1 b 2020 61.0 52.0 63.0 2 c 2020 91.0 92.0 83.0