Панды - Как сделать группировку, в которой новый столбец является результатом (сумма столбца) / (количество сгруппированных итенов)? - PullRequest
0 голосов
/ 12 января 2019

Мне нужно сделать какую-то группировку, в которой новый столбец (результат) представляет собой сумму столбца значений, деленную на количество найденных элементов? Может ли кто-нибудь помочь мне, пожалуйста?

Например:

Таблица A

+-------+------+
| item  | value|
+-------+------+
| x     |  100 |
| y     |  200 |
| y     |  400 | 
+-------+------+

Правильный результат:

Таблица B

+-------+-----------+
| item  | result    |
+-------+-----------+
| x     | 100/1     |
| y     |(200+400)/2|
+-------+-----------+

Код:

d = {'item': ['x', 'y', 'y'], 'value': [100,200,400]}
df = pd.DataFrame(data=d)
df

1 Ответ

0 голосов
/ 12 января 2019

Вы можете использовать DataFrameGroupBy.agg:

s = df.groupby('item')['value'].agg(lambda x: x.sum()/len(x)) 
print (s)
item
x    100
y    300
Name: value, dtype: int64

Или разделить GroupBy.sum с GroupBy.size:

g = df.groupby('item')['value']
s = g.sum() / g.size()
print (s)
item
x    100.0
y    300.0
Name: value, dtype: float64

Но sum/size - это mean, поэтому решение должно быть упрощено на GroupBy.mean:

s = df.groupby('item')['value'].mean()
print (s)
item
x    100
y    300
Name: value, dtype: int64
...