Сгруппируйте все столбцы и сохраните не числовые - PullRequest
0 голосов
/ 06 октября 2019

У меня есть набор данных с почти 200 столбцами. Все эти столбцы являются числовыми. Однако у меня есть 3 столбца, которые не являются числовыми, и я хочу сохранить их - я не хочу группировать их.

Пример:

team_ref num_1 num_2 num_3 matchday match_id season_id
a            1     1     1        A     AeD       2018  
a            2     2     2        B     AbD       2018
b            3     1     1        A     AeD       2018
b            4     2     2        B     AbD       2018

Я хочу сгруппировать по team_ref и сделать среднее значение num1, num2, num3, но я хочу оставить для этого события день матча, match_id и season_id.

Поскольку у меня есть десятки столбцов, которые я хочу сгруппировать, использование agg - не лучшая идея.

Любое предложение о том, как это сделать?

С уважением

Ответы [ 2 ]

3 голосов
/ 06 октября 2019

Мы можем сделать

df.groupby('team_ref').agg(lambda x : x.mean() if x.dtype!= 'object' else ','.join(x))
Out[26]: 
          num_1  num_2  num_3 matchday match_id  season_id
team_ref                                                  
a           1.5    1.5    1.5      A,B  AeD,AbD       2018
b           3.5    1.5    1.5      A,B  AeD,AbD       2018
2 голосов
/ 06 октября 2019

Один из способов - сначала сгруппировать team_ref, получить среднее значение num_1-3 и сгруппировать остальные в список. И наконец, объедините их вместе:

import pandas as pd

df = pd.DataFrame({'team_ref': {0: 'a', 1: 'a', 2: 'b', 3: 'b'}, 'num_1': {0: 1, 1: 2, 2: 3, 3: 4}, 'num_2': {0: 1, 1: 2, 2: 1, 3: 2}, 'num_3': {0: 1, 1: 2, 2: 1, 3: 2}, 'matchday': {0: 'A', 1: 'B', 2: 'A', 3: 'B'}, 'match_id': {0: 'AeD', 1: 'AbD', 2: 'AeD', 3: 'AbD'}, 'season_id': {0: 2018, 1: 2018, 2: 2018, 3: 2018}})

grouped = df.groupby('team_ref')

new_df = grouped["num_1","num_2","num_3"].mean().reset_index().merge(
         grouped["matchday", "match_id","season_id"].agg(lambda x: x.tolist()).reset_index(),
         on="team_ref",how="left")

print (new_df)

#
  team_ref  num_1  num_2  num_3 matchday    match_id     season_id
0        a    1.5    1.5    1.5   [A, B]  [AeD, AbD]  [2018, 2018]
1        b    3.5    1.5    1.5   [A, B]  [AeD, AbD]  [2018, 2018]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...