【问题标题】:Python: How to filter row with latest date for each category and fill in the value from row with oldest date to row with latest datePython:如何过滤每个类别的最新日期行,并将值从最旧日期的行填充到最新日期的行
【发布时间】:2021-04-10 00:16:59
【问题描述】:

这是一个示例数据集:

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

我想要做的是按列“名称”过滤最新日期(例如:艾伦)。但是,所有信息都在日期最早的行中(例如:成绩、代码),日期最晚的行都有缺失数据。我希望结果仅显示具有最新日期的行,但还希望将信息从具有最旧日期的行移动到具有最新日期的行。就像下面的结果一样。

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

我不确定是否可行,也找不到相关结果。 提前致谢!

【问题讨论】:

    标签: python pandas numpy date filter


    【解决方案1】:

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

    >>> 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
    >>> 
    

    【讨论】:

    • 非常感谢!在这种情况下可以使用group by,谢谢您的启发
    【解决方案2】:

    试试:

    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
    

    【讨论】:

    • 非常感谢!这很好用,只是注意到在这种情况下可以应用“填充”方法!
    • @AllenFan 如果您认为答案有用,请接受并投票,祝您有美好的一天:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2021-04-30
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    相关资源
    最近更新 更多