【问题标题】:Merge multiple rows to one row in a csv file using python pandas使用python pandas将多行合并为csv文件中的一行
【发布时间】:2020-01-15 17:35:50
【问题描述】:

我有一个包含多行的 csv 文件,如下所述

Id  Name  Marks1 Marks2 Marks3 Marks4 Marks5
1   ABC   10     NAN    NAN    NAN    NAN
2   BCD   15     NAN    NAN    NAN    NAN
3   CDE   17     NAN    NAN    NAN    NAN
1   ABC   NAN    18     NAN    17     NAN
2   BCD   NAN    10     NAN    15     NAN
1   ABC   NAN    NAN    16     NAN    NAN
3   CDE   NAN    NAN    19     NAN    NAN

我想在 python 中使用 pandas 将具有相同 id 和 name 的行合并为一行。输出应该是:

Id  Name  Marks1 Marks2 Marks3 Marks4 Marks5
1   ABC   10     18     16     17     NAN
2   BCD   15     10     NAN    15     NAN
3   CDE   17     NAN    19     NAN    NAN

【问题讨论】:

    标签: python database pandas pandas-groupby


    【解决方案1】:

    IIUC,DataFrame.groupby + as_index=FalseGroupBy.first 以消除 NaN

    #df = df.replace('NAN',np.nan) #If necessary
    df.groupby(['Id','Name'],as_index=False).first()
    

    如果您认为它可能在某些列中有一对带有非空值的 Id Name,您可以使用 GroupBy.applySeries.ffillSeries.bfill + DataFrame.drop_duplicates 来保留所有信息。

    df.groupby(['Id','Name']).apply(lambda x: x.ffill().bfill()).drop_duplicates()
    

    输出

       Id Name Marks1 Marks2 Marks3 Marks4  Marks5
    0   1  ABC     10     18     16     17     NaN
    1   2  BCD     15     10    NaN     15     NaN
    2   3  CDE     17    NaN     19    NaN     NaN
    

    【讨论】:

      【解决方案2】:

      老生常谈的答案:

      pd.groupby(“Name”).mean().reset_index()
      

      这只有在每一列的每个名称只有一个有效值时才有效。

      【讨论】:

        猜你喜欢
        • 2017-07-03
        • 1970-01-01
        • 2013-12-02
        • 2016-01-31
        • 1970-01-01
        • 1970-01-01
        • 2018-06-11
        • 2022-10-16
        • 2019-06-25
        相关资源
        最近更新 更多