Python:如何为每个类别筛选具有最新日期的行,并填写从具有最早日期的行到具有最晚日期的行的值



这是一个示例数据集:

df = pd.DataFrame({'Date': ['11-9-2019', '11-9-2020', '11-8-2019', '15-5-2020'],
'name': ['Allen', 'Allen', 'David', 'David'],
'Grade': [50, np.nan, 60, np.nan],
'code': [3352326, np.nan, 22233467, np.nan]})
df['Date'] = pd.to_datetime(df['Date'])
df

我想做的是按"名称"列(例如:Allen(过滤最新日期。但是,所有信息都在最早日期的行中(例如:等级、代码(,最新日期的行都缺少数据。我希望结果只显示具有最新日期的行,但也希望将信息从具有最早日期的行移动到具有最晚日期的行。就像下面的结果一样。

df1 = pd.DataFrame({'Date': ['11-9-2020', '15-5-2020'],
'name': ['Allen', 'David'],
'Grade': [50, 60],
'code': [3352326, 22233467]})
df1['Date'] = pd.to_datetime(df1['Date'])
df1

我不确定这是否可能,也找不到相关的结果。提前感谢!

如果实际值总是组的第一行,您可以尝试:

>>> df.groupby('name').first().reset_index()
name       Date  Grade        code
0  Allen 2019-11-09   50.0   3352326.0
1  David 2019-11-08   60.0  22233467.0
>>> 

如果它们不总是第一个,你可以尝试:

>>> df.groupby('name').apply(lambda x: x.apply(lambda y: y.dropna().tolist()).iloc[0]).rename_axis('').reset_index().drop('', axis=1)
Date  Grade        code   name
0 2019-11-09   50.0   3352326.0  Allen
1 2019-11-08   60.0  22233467.0  David
>>> 

尝试:

df[['Grade','code']]=df[['Grade','code']].fillna(method='ffill')
df_out=df.groupby('name').agg('last').reset_index()

输出:

df_out
Out[32]: 
name       Date  Grade        code
0  Allen 2020-11-09   50.0   3352326.0
1  David 2020-05-15   60.0  22233467.0

相关内容

  • 没有找到相关文章

最新更新