【问题标题】:Grouping one column using agg & join but only on unique values使用 agg & join 对一列进行分组,但仅限于唯一值
【发布时间】:2018-07-17 10:14:25
【问题描述】:

我在以下数据集上使用了这段巧妙的代码

    df = pd.DataFrame({
    'contact_email': ['info@info.com', 'info@info.com', 'info@info.com'], 
    'interest': ['Math', 'Science', 'Science']
})
    print(df)
    interest contact_email
0   Math    info@info.com
1   Science info@info.com
2   Science info@info.com

df = df.groupby('Contact_Email').agg({'interest' : ' '.join}).reset_index()
print(df)

        contact_email   AOI
0   info@info.com   Math Science Science

这与我想要的非常接近,但我只需要返回独特的兴趣。 (我让用户/客户输入相同的表单,几乎 10 次使用相同的值!)

另外,很高兴有谁知道如何删除 0,1,2,3 索引。

谢谢!

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    使用unique 删除重复项:

    df = (df.groupby('contact_email')
            .agg({'interest' : lambda x: ' '.join(x.unique())})
            .reset_index())
    print(df)
       contact_email      interest
    0  info@info.com  Math Science
    

    或者sets,但是值的顺序应该改变:

    df = df.groupby('contact_email').agg({'interest' : lambda x: ' '.join(set(x))}).reset_index()
    print(df)
       contact_email      interest
    0  info@info.com  Math Science
    

    drop_duplicates:

    df = (df.drop_duplicates(subset=['contact_email','interest'])
           .groupby('contact_email')
           .agg({'interest' : ' '.join})
           .reset_index())
    print(df)
       contact_email      interest
    0  info@info.com  Math Science
    

    【讨论】:

    • @Datanovice - 欢迎您!但如果需要最好的性能,我猜最后一个解决方案应该是最快的(取决于数据)
    • 我只有 3000 条记录,我们每个月只有 4-8k 用户输入我们的表单,所以这是完美的 :)
    【解决方案2】:

    由于你只有一个功能,你可以使用groupby + apply 并使用set

    res = df.groupby('contact_email')['interest']\
            .apply(set).apply(' '.join)\
            .reset_index()
    
    print(res)
    
       contact_email      interest
    0  info@info.com  Math Science
    

    【讨论】:

      猜你喜欢
      • 2017-11-20
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多