pandas деление на групповые остатки - PullRequest
0 голосов
/ 02 марта 2020

Я хотел бы выполнить деление на столбец с точностью 2 di git, но мне нужно убедиться, что оно суммируется с требуемым числом (200) на уровне группы.

Я не уверен Каков наилучший способ приблизиться к этому.

Пример:

vehicle   |  count  |  result   |  calculation

ford      |    2    |   100     |  round(200/count, 2) = 100
ford      |    2    |   100     |  200 - 100 = 100
chevrolet |    3    |   66.67   |  round(200/count, 2) = 66.67
chevrolet |    3    |   66.67   |  round(200/count, 2) = 66.67
chevrolet |    3    |   66.66   |  200 - 66.67 - 66.67 = 66.66

1 Ответ

0 голосов
/ 03 марта 2020

Вы можете добавить остаток к последнему элементу группы, т.е.

df['result'] = df.groupby('vehicle', as_index=False).transform(lambda gr: round(200/len(gr), 2))
def add_resid(gr: pd.DataFrame):
    gr['result'].iloc[-1] += 200 - gr['result'].sum()
    return gr

df['result'] = df.groupby('vehicle', as_index=False).apply(add_resid)

Тем не менее, если у вас большая группа, это приведет к ошибке. Еще один способ сделать это - присвоить остаток «покатым» способом.

...