【问题标题】:Python Pandas: Delete duplicate rows based on one column and concatenate information from multiple columnsPython Pandas:基于一列删除重复行并连接多列中的信息
【发布时间】:2021-05-13 12:25:37
【问题描述】:

我有一个 pandas 数据框,其中包含根据一列 (ID) 的重复项,但在其他几列中具有不同的值。我的目标是根据 ID 删除重复项,但连接其他列中的信息。

这是我正在使用的示例:

ID    Age   Gender   Form          Signature   Level
000   30    M        Paper         Yes         A
000   30    M        Electronic    No          B
001   42             Paper         No          B

处理后,我希望数据看起来像这样:

ID    Age   Gender   Form                      Signature   Level
000   30    M        Paper, Electronic         Yes, No     A, B
001   42             Paper                     No          B

首先,我用“Not Noted”填充了 nAn 单元格,以便可以使用 groupby 函数。我尝试了以下代码:

df = df.groupby(['ID', 'Age', 'Gender'])['Form'].apply(set).reset_index()

这负责连接表单列,但我不知道如何合并签名和级别列。有人有什么建议吗?

【问题讨论】:

    标签: python pandas dataframe duplicates pandas-groupby


    【解决方案1】:

    你可以这样做:

    import pandas as pd
    
    df = pd.DataFrame({'ID': ['000', '000', '001'],
                       'Age': [30, 30, 42],
                       'Gender': ['M', 'M', ''],
                       'Form': ['Paper', 'Electronic', 'Paper'],
                       'Signature': ['Yes', 'No', 'No'],
                       'Level': ['A', 'B', 'B']})
    
    df = df.groupby(['ID', 'Age', 'Gender']).agg({'Form': set, 'Signature': set, 'Level': set}).reset_index()
    
    print(df)
    

    输出:

        ID  Age Gender                 Form  Signature   Level
    0  000  30   M      {Electronic, Paper}  {No, Yes}  {B, A}
    1  001  42          {Paper}              {No}       {B} 
    

    【讨论】:

    • 这就像一个魅力。非常感谢!
    【解决方案2】:

    您可以通过分别修改每一列然后将它们与一些基本的列表理解和pd.concat 函数连接起来来做到这一点。

    g = df.groupby(['ID', 'Age', 'Gender'])
    concatCols = ['Form', 'Signature', 'Level'] #? Used to define which columns should be concatenated
    df = pd.concat([g[c].apply(set) for c in concatCols], axis=1).reset_index()
    print(df)
    

    【讨论】:

    • 这也是一个很好的解决方案 - David 的解决方案对我来说更直观一些。感谢您的评论!
    猜你喜欢
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 2021-11-03
    • 2018-04-22
    • 1970-01-01
    相关资源
    最近更新 更多