简体   繁体   中英

Python DataFrame: count of occurances based on another column

I have a Python Data Frame of teams and a place that they have achieved (1, 2 or 3)

Team place
A 1
A 1
A 1
A 2
A 3
A 1
A 1
B 2
B 2

I want to manipulate the df to look like this below. So it is a count of how often a team has achieved each place.

Team 1 2 3
A 5 1 1
B 0 2 0

You can get the value counts for each group and then unstack the index. The rest is twiddling to get your exact output.

(df.groupby('Team')['place']
   .value_counts()
   .unstack(fill_value=0)
   .reset_index()
   .rename_axis(None, axis=1)
) 

You could use pandas.crosstab :

pd.crosstab(df['Team'], df['place'])

or a simple groupby + size and unstack :

(df.groupby(['Team', 'place']).size()
   .unstack('place', fill_value=0)
)

output:

place  1  2  3
Team          
A      5  1  1
B      0  2  0
all as columns
(pd.crosstab(df['Team'], df['place'])
   .rename_axis(columns=None)
   .reset_index()
)

output:

  Team  1  2  3
0   A   5  1  1
1   B   0  2  0

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM