返回groupby结果,其中索引在熊猫中包含多行

时间:2019-07-21 21:54:02

标签: python pandas group-by pandas-groupby

我有以下数据框:

ID      Company Name       State
200     Apple              CA
300     Microsoft          CA
300     Grant Thornton     IL
200     Amazon             WA
200     Apple              CA
250     Dollar Tree        VA
250     Dollar Tree        VA
250     Dollar Tree        VA
400     Target             MN
400     Target             MN

运行以下代码,我得到结果:

df.groupby('ID')['Company Name'].value_counts()

ID     Company Name    Count
200    Apple           2
       Amazon          1
250    Dollar Tree     3
300    Microsoft       1
       Grant Thornton  1
400    Target          2

我正在寻找一种仅返回与每个ID关联多行的结果的方法。也就是说,所需的输出是:

ID    Company Name    Count
200   Apple           2
      Amazon          1
300   Microsoft       1
      Grant Thornton  1

获取解决方案并不重要,它可以在原始groupby期间进行过滤,也可以将原始groupby保存为序列,然后在其上运行另一个表达式。任何帮助都将不胜感激,非常感谢!

1 个答案:

答案 0 :(得分:1)

您需要根据每个“ ID”的“公司名称”的唯一性来预过滤df

df_uniq = df[df.groupby('ID')['Company Name'].transform('nunique') > 1]
df_uniq.groupby('ID')['Company Name'].value_counts()

ID   Company Name  
200  Apple             2
     Amazon            1
300  Grant Thornton    1
     Microsoft         1
Name: Company Name, dtype: int64

您还可以过滤以下事实:

res = df.groupby('ID')['Company Name'].value_counts()
res[res.groupby(level=0).transform('count') > 1]

ID   Company Name  
200  Apple             2
     Amazon            1
300  Grant Thornton    1
     Microsoft         1
Name: Company Name, dtype: int64