Как вычислить среднее значение для подмножеств различного размера в кадре данных панд? - PullRequest
2 голосов
/ 13 октября 2019

вычисляет среднее значение определенного столбца для каждого уникального подмножества строк в кадре данных pandas. В следующем примере каждое подмножество до 1 появляется в столбце «Флаг», т. Е. (54 + 34 + 78 + 91 + 29) / 5 = 57,2 и (81 + 44 + 61) / 3 = 62,0

В настоящее время невозможновычислять подмножество прокатки разных размеров на основе конкретного условия столбца


>>> import pandas as pd
>>> df = pd.DataFrame({"Indx": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Units": [54, 34, 78, 91, 29, 81, 44, 61, 73, 19], "Flag": [0, 0, 0, 0, 1, 0, 0, 1, 0, 1]})
>>> df
   Indx  Units  Flag
0     1     54     0
1     2     34     0
2     3     78     0
3     4     91     0
4     5     29     1
5     6     81     0
6     7     44     0
7     8     61     1
8     9     73     0
9    10     19     1

# DESIRED OUTPUT
>>> df
   Indx  Units  Flag   avg
0     1     54     0  57.2
1     2     34     0  57.2
2     3     78     0  57.2
3     4     91     0  57.2
4     5     29     1  57.2
5     6     81     0  62.0
6     7     44     0  62.0
7     8     61     1  62.0
8     9     73     0  46.0
9    10     19     0  46.0

Ответы [ 2 ]

2 голосов
/ 13 октября 2019

Создайте ключ группы, используя cumsum, затем transform

df['Units'].groupby(df.Flag.iloc[::-1].cumsum()).transform('mean')
0    57.2
1    57.2
2    57.2
3    57.2
4    57.2
5    62.0
6    62.0
7    62.0
8    46.0
9    46.0
Name: Units, dtype: float64

#df['new']=df['Units'].groupby(df.Flag.iloc[::-1].cumsum()).transform('mean')
0 голосов
/ 13 октября 2019

Самое короткое решение (я думаю):

df['avg'] = df.groupby(df.Flag[::-1].cumsum()).Units.transform('mean')

Вам даже не нужно использовать iloc , так как df.Flag [:: - 1] возвращает Флаг столбец в обратном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...