Сгруппировать столбец и создать новый столбец при агрегировании по условным операторам - PullRequest
1 голос
/ 09 октября 2019

Я хочу сгруппировать цвета, посчитать количество вхождений этого цвета в столбце и создать новый столбец within_range, в котором будет количество случаев, где: min_amount <= amount <= max_amount

df = pd.DataFrame({'color': ['red', 'yellow', 'blue', 'red','yellow'], 
                   'amount': [0.5, 0.25, 0.125, 0.9, 0.8],
                   'min_amount': [0, 0.2, 0.1, 0.5, 0.7],
                   'max_amount':[1, 0.7, 0.2, 0.6, 0.9]})

Подсчетколичество вхождений можно сделать, используя:

df.groupby('color').agg({'color':'count'}) но как получить ожидаемый результат?

Ожидаемый результат:

color         count    within_range
red             2            1
yellow          2            2
blue            1            1

1 Ответ

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

Вам нужно только определить серию и группу within_range:

df['within_range'] = (df['amount'].le(df['max_amount']) 
                      & df['amount'].ge(df['min_amount'])
                     )

(df.groupby('color')['within_range']
   .agg(count='count',winthin_range='sum')
)

Вывод:

        count  winthin_range
color                       
blue        1            1.0
red         2            1.0
yellow      2            2.0
...