【问题标题】:Python adding missing rows based on a single columnPython基于单列添加缺失的行
【发布时间】:2021-09-06 10:55:20
【问题描述】:

我有一个包含两列感兴趣的数据框:一列包含名称(对每门课程重复),一列包含他们已经学习或开始的课程名称。问题是,如果我按原样使用数据框,如果一个人没有尝试过该课程,他们根本不会显示该课程的价值,因此我将无法判断谁错过了课程。有没有办法自动生成带有名称的缺失行?其他列可以是 N/A 或其他任何内容。

数据框:

Name Course Title Completion Date
Mark Math 1/1/2021
Mark English 2/1/2021
Mark Econ 3/1/2021
David Math 7/1/2021
David English 4/1/2021
Cindy Math 6/1/2021
Cindy English 9/1/2021
Cindy Econ 11/1/2021

我在寻找什么:

Name Course Title Completion Date
Mark Math 1/1/2021
Mark English 2/1/2021
Mark Econ 3/1/2021
David Math 7/1/2021
David English 4/1/2021
David Econ N/A
Cindy Math 6/1/2021
Cindy English 9/1/2021
Cindy Econ 11/1/2021

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用pyjanitor 中的complete 函数明确缺失值:

    # pip install pyjanitor
    import pandas as pd
    import janitor
    df.complete('Name', 'Course Title')
    
        Name Course Title Completion Date
    0  Cindy         Econ       11/1/2021
    1  Cindy      English        9/1/2021
    2  Cindy         Math        6/1/2021
    3  David         Econ             NaN
    4  David      English        4/1/2021
    5  David         Math        7/1/2021
    6   Mark         Econ        3/1/2021
    7   Mark      English        2/1/2021
    8   Mark         Math        1/1/2021
    

    【讨论】:

      【解决方案2】:

      试试pivotstackreset_index

      >>> df.pivot(*df).stack(dropna=False)[::-1].reset_index(name='Completion Date')
          Name Course Title Completion Date
      0   Mark         Math        1/1/2021
      1   Mark      English        2/1/2021
      2   Mark         Econ        3/1/2021
      3  David         Math        7/1/2021
      4  David      English        4/1/2021
      5  David         Econ             NaN
      6  Cindy         Math        6/1/2021
      7  Cindy      English        9/1/2021
      8  Cindy         Econ       11/1/2021
      >>> 
      

      如果您特别希望它是N/A,请尝试:

      >>> df.pivot(*df).stack(dropna=False)[::-1].reset_index(name='Completion Date').fillna('N/A')
          Name Course Title Completion Date
      0   Mark         Math        1/1/2021
      1   Mark      English        2/1/2021
      2   Mark         Econ        3/1/2021
      3  David         Math        7/1/2021
      4  David      English        4/1/2021
      5  David         Econ             N/A
      6  Cindy         Math        6/1/2021
      7  Cindy      English        9/1/2021
      8  Cindy         Econ       11/1/2021
      >>> 
      

      【讨论】:

        猜你喜欢
        • 2021-05-07
        • 2013-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        • 2017-11-09
        相关资源
        最近更新 更多