# How can repetitive rows of data be collected in a single row in pandas?

I have a dataset that contains the NBA Player’s average statistics per game. Some player’s statistics are repeated because of they’ve been in different teams in season.

For example:

``````      Player       Pos  Age Tm    G     GS   MP      FG
8   Jarrett Allen   C   22  TOT  28     10  26.2     4.4
9   Jarrett Allen   C   22  BRK  12     5   26.7     3.7
10  Jarrett Allen   C   22  CLE  16     5   25.9     4.9
``````

I want to average Jarrett Allen’s stats and put them into a single row. How can I do this?

## Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

### Solution 1

You can `groupby` and use `agg` to get the mean. For the non numeric columns, let’s take the first value:

``````df.groupby('Player').agg({k: 'mean' if v in ('int64', 'float64') else 'first'
for k,v in df.dtypes[1:].items()})
``````

output:

``````              Pos  Age   Tm          G        GS         MP        FG
Player
Jarrett Allen   C   22  TOT  18.666667  6.666667  26.266667  4.333333
``````

NB. content of the dictionary comprehension:

``````{'Pos': 'first',
'Age': 'mean',
'Tm': 'first',
'G': 'mean',
'GS': 'mean',
'MP': 'mean',
'FG': 'mean'}
``````

### Solution 2

``````x = [['a', 12, 5],['a', 12, 7], ['b', 15, 10],['b', 15, 12],['c', 20, 1]]

import pandas as pd
df = pd.DataFrame(x, columns=['name', 'age', 'score'])
print(df)
print('-----------')

df2 = df.groupby(['name', 'age']).mean()
print(df2)
``````

Output:

``````  name  age  score
0    a   12      5
1    a   12      7
2    b   15     10
3    b   15     12
4    c   20      1
-----------
score
name age
a    12       6
b    15      11
c    20       1
``````

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0