我有以下数据框:
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保存为序列,然后在其上运行另一个表达式。任何帮助都将不胜感激,非常感谢!
答案 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