Группировать и суммировать и вставлять как новую строку с предыдущими столбцами - PullRequest
0 голосов
/ 29 марта 2020

Я реструктурирую данные. Процесс содержит две задачи:

  1. вставка новой строки суммированием groupby.
  2. создание нового столбца Уровень .

Я вставил ожидаемый результат в рисунок 1 и рисунок 2.

Фрейм данных содержит несколько столбцов. Пример фрейма данных выглядит следующим образом:

df = pd.DataFrame()
df ['Competition']= ['EPL','EPL','EPL','EPL','EPL','EPL','EPL','EPL','EPL','EPL']
df ['Player']= ['Bruno','Bruno','Bruno','Bruno','Bruno','Bruno','Bruno','Bruno','Bruno','Bruno']
df ['template'] = ['Def','Def','Pass','Pass','Actions','Actions','Attk','Attk','Other','Other']
df ['Stats'] = ['Def duels', ' ','Back passes', ' ','Dribbles', ' ','Goal','Assist','Possession Losses','Possession Losses [own half]']
df ['Stat1'] = [' ', 'Def duels Won',' ', 'Back passes[Acc]',' ', 'Dribbles[Suc]',' ',' ',' ',' ']
df ['Value'] = [5,2.5,60,55,5,2,2,1,3,1]

Я хочу суммировать значение с помощью группировки по столбцам Competition, Player, Template . Значение будет вставлено как новая строка чуть выше существующей строки. Ожидаемый фрейм данных выглядит следующим образом:

enter image description here

Исходя из вышеупомянутого фрейма даты, я хотел бы создать новый столбец Уровень следующим образом:

enter image description here

> The Level as defined as follow: level= 1 if blank or no data in the
> columns **Stats,Stats1** level= 2 if blank or no data in the columns
> **Stats1** level= 3 if data in the columns **Stats1**

Как бы я это сделал?

1 Ответ

2 голосов
/ 29 марта 2020

Это np.select, вы можете изменить это по своему усмотрению:

# add extra rows with concat
df = pd.concat((df, df.groupby(['Competition','Player','template'])
                 .Value.sum().reset_index()
               )
         ).fillna(' ')

df['Level'] = np.select((df['Stat1'].ne(' '), df['Stats'].ne(' ')),
                        (3, 2), 1)

Вывод:

    Competition    Player    template    Stats                         Stat1               Value    Level
--  -------------  --------  ----------  ----------------------------  ----------------  -------  -------
 0  EPL            Bruno     Def         Def duels                                           5          2
 1  EPL            Bruno     Def                                       Def duels Won         2.5        3
 2  EPL            Bruno     Pass        Back passes                                        60          2
 3  EPL            Bruno     Pass                                      Back passes[Acc]     55          3
 4  EPL            Bruno     Actions     Dribbles                                            5          2
 5  EPL            Bruno     Actions                                   Dribbles[Suc]         2          3
 6  EPL            Bruno     Attk        Goal                                                2          2
 7  EPL            Bruno     Attk        Assist                                              1          2
 8  EPL            Bruno     Other       Possession Losses                                   3          2
 9  EPL            Bruno     Other       Possession Losses [own half]                        1          2
 0  EPL            Bruno     Actions                                                         7          1
 1  EPL            Bruno     Attk                                                            3          1
 2  EPL            Bruno     Def                                                             7.5        1
 3  EPL            Bruno     Other                                                           4          1
 4  EPL            Bruno     Pass                                                          115          1
...