首页 > 解决方案 > Python Pandas 分组列而不聚合

问题描述

我有一个包含 3 列的数据框。用户名、电子邮件和会员资格。我想按成员分组。

输入数据框如下所示:

abc1 abc@company.com prod1
abc1 abc@company.com prod2
abc1 abc@company.com prod3
def1 def@company.com prod2
def1 def@company.com prod3
xyz1 xyz@company.com prod1
xyz1 xyz@company.com prod3
xyz1 xyz@company.com prod4

我想要的输出是:

abc1  abc@company.com prod1
                      prod2
                      prod3
def1  def@company.com prod2
                      prod3
xyz1  xyz@company.com prod1
                      prod3
                      prod4

我试过了,但如果不使用聚合函数似乎无法解决

这是代码片段:

df = pd.DataFrame(data['Members'])
dn_group = df.groupby(['username','email'])
new_df  = dn_group['membership'].agg('value_counts')
print(new_df)

这是我得到的:

username  email           membership 
abc1      abc@company.com prod1        1
                          prod2        1
                          prod3        1
def1  def@company.com     prod2        1
                          prod3        1
xyz1  xyz@company.com     prod1        1
                          prod3        1
                          prod4        1

基本上,我不想得到最后一列的计数。

`

标签: pythonpandas

解决方案


这个解决方案怎么样:

import pandas as pd 
df = pd.DataFrame({
    "username": ['abc1','abc1','abc1','def1','def1','xyz1','xyz1','xyz1'],
    "email":['abc@company.com','abc@company.com','abc@company.com','def@company.com','def@company.com','xyz@company.com','xyz@company.com','xyz@company.com'],
    'membership':['prod1','prod2','prod3','prod2','prod3','prod1','prod3','prod4'] })
df.groupby(['username','email'], as_index=False).agg(lambda x: set(x))

结果:

username    email            membership
0   abc1    abc@company.com  {prod2, prod3, prod1}
1   def1    def@company.com  {prod2, prod3}
2   xyz1    xyz@company.com  {prod4, prod3, prod1}

推荐阅读