Как суммировать, усреднять, считать групповые и стандартные отклонения в одном и том же кадре данных? - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь сгруппировать этот фрейм данных по «Имени» и «Сайту», и я хочу создать 4 новых столбца, в которых будет указана сумма, количество сгруппированных, среднее и стандартное отклонение столбца «Потратить».

Вот мой код:

import pandas as pd

df=pd.DataFrame({'Name':['Harry','John','Holly','John','John','John','Holly','Holly','Molly','Molly','Holly','Harry','Harry','Harry'], 'Spend': [76,43,23,43,234,54,34,12,43,54,65,23,12,32],
                 'Site': ['Amazon','Ikea','Apple','Amazon', 'Apple', 'Ikea', 'Apple', 'Apple', 'Amazon', 'Amazon', 'Ikea', 'Amazon', 'Amazon', 'Ikea']})

print (df)

В настоящее время мой фрейм данных выглядит так:

enter image description here

И я хочуэто будет выглядеть так:

enter image description here

Как бы я поступил так?

Заранее спасибо

РЕДАКТИРОВАТЬ 10/11/18:

Код:

import pandas as pd

df=pd.DataFrame({'Name':['Harry','John','Holly','John','John','John','Holly','Holly','Molly','Molly','Holly','Harry','Harry','Harry'], 'Spend': [76,43,23,43,234,54,34,12,43,54,65,23,12,32],
                 'Site': ['Amazon','Ikea','Apple','Amazon', 'Apple', 'Ikea', 'Apple', 'Apple', 'Amazon', 'Amazon', 'Ikea', 'Amazon', 'Amazon', 'Ikea'], 'Spend2': [176,143,123,143,1234,154,134,112,143,254,365,423,512,632]})

print (df)

До:

enter image description here

После:

enter image description here

1 Ответ

0 голосов
/ 10 ноября 2018
df_summary = df.groupby(['Name', 'Site']).agg([np.sum, pd.Series.count, np.mean, np.std])
df_summary.columns = ['Sum', 'Count Groupbys', 'Average', 'Standard Deviation']
df_summary = df_summary.reset_index().sort_values(['Site', 'Name'])

>>> df_summary
    Name    Site  Sum  Count Groupbys  Average  Standard Deviation
0  Harry  Amazon  111               3     37.0           34.219877
4   John  Amazon   43               1     43.0                 NaN
7  Molly  Amazon   97               2     48.5            7.778175
2  Holly   Apple   69               3     23.0           11.000000
5   John   Apple  234               1    234.0                 NaN
1  Harry    Ikea   32               1     32.0                 NaN
3  Holly    Ikea   65               1     65.0                 NaN
6   John    Ikea   97               2     48.5            7.778175

Для вашего редактирования вы можете использовать agg, передав словарь, снабженный ключами для столбцов, значениями которых являются функции, применяемые к этим столбцам:

df_summary = df.groupby(['Name', 'Site']).agg(
    {'Spend': [np.sum, pd.Series.count], 
     'Spend2': [np.mean, np.std]}
)
df_summary.columns = ['Sum_Spend', 'CountGroupbys_Spend', 'Average_Spend2', 'Standard_Deviation_Spend2']
df_summary = df_summary.reset_index().sort_values(['Site', 'Name'])

>>> df_summary

    Name    Site    Sum_Spend   CountGroupbys_Spend Average_Spend2  Standard_Deviation_Spend2
0   Harry   Amazon  111        3    370.333333      174.081399
4   John    Amazon  43         1    143.000000      NaN
7   Molly   Amazon  97         2    198.500000      78.488853
2   Holly   Apple   69         3    123.000000      11.000000
5   John    Apple   234        1    1234.000000     NaN
1   Harry   Ikea    32         1    632.000000      NaN
3   Holly   Ikea    65         1    365.000000      NaN
6   John    Ikea    97         2    148.500000      7.778175
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...