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

У меня есть данные, подобные следующим. Это в формате фрейма данных pandas.

A  B  C  D  E  F  G
1  1  2  3  1  4  2
1  1  2  4  5  6  7
1  1  2  3  2  3  2
1  1  2  4  5  6  7
2  1  2  3  2  3  4
2  1  2  3  4  3  3
2  1  2  4  5  6  7

здесь agg_lvl = ['A', 'B', 'C']

Я хочу вычислить среднее | медиану | сумму для переменной G, используя записи tail (2) в каждой группе, когда данные агрегированы в agg_lvl.

И мой ожидаемый результат такой:

ожидаемый результат для среднего значения:

A  B  C  G
1  1  2  4.5
2  1  2   5

вывод будет одинаковым и для медианы и суммы, но вместо среднего значения мы должны учитывать значения медианы и суммы.

для этого я попробовал следующий код, но не получил ожидаемый результат.

df.groupby(agg_lvl,as_index=False).tail(2).agg({'G':'mean'})

Может кто-нибудь помочь мне решить эту проблему.

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

1 Ответ

0 голосов
/ 05 сентября 2018

Используйте GroupBy.transform вместо agg для возврата нового столбца с такой же формой, как у отфильтрованного DataFrame, по tail:

agg_lvl=['A','B','C']
df = df.groupby(agg_lvl,as_index=False).tail(2)
df['G'] = df.groupby(agg_lvl)['G'].transform('mean')
print (df)
   A  B  C  D  E  F    G
2  1  1  2  3  2  3  4.5
3  1  1  2  4  5  6  4.5
5  2  1  2  3  4  3  5.0
6  2  1  2  4  5  6  5.0

EDIT:

df = df.groupby(agg_lvl,as_index=False).tail(2).groupby(agg_lvl,as_index=False)['G'].mean()
print (df)
   A  B  C    G
0  1  1  2  4.5
1  2  1  2  5.0
...