3

I currently have the following:

   Business Name   Violation    Business License #   
   Place 1         Crime 1      111
   Place 1         Crime 2      222
   Place 2         Crime 3      333
   Place 3         Crime 4      444
   Place 3         Crime 5      444

I'm trying to get the following:

Business Name   Violations    Business License #'s
  Place 1             2                 2
  Place 2             1                 1
  Place 3             2                 1

Essentially, I just need to get the count of two different columns based on business name. This is the code I have so far that I know is wrong:

df.groupby(['Business Name','Business License #']).size()

Any help would be greatly appreciated!

eyllanesc
  • 235,170
  • 19
  • 170
  • 241

2 Answers2

2

Use pandas.DataFrame.groupby.nunique:

df.groupby('Business Name')[['Violation','Business License #']].nunique()
               Violation  Business License #
Business Name                               
Place 1                2                   2
Place 2                1                   1
Place 3                2                   1
Chris
  • 29,127
  • 3
  • 28
  • 51
1

Chris is right, nunique will do the job, but you need to reset your index afterwards:

df.groupby('Business Name')[['Business Violation', 'Business License']].nunique().reset_index()

       Business Name  Business Violation  Business License
0        Place 1                   2                 2
1        Place 2                   1                 1
2        Place 3                   2                 1
entropy
  • 840
  • 6
  • 16