熊猫分部保持分组

时间:2020-03-02 13:51:26

标签: python pandas division

我想对列进行2位精度的除法,但我需要确保在分组级别上将其总计为所需的数字(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 :(得分:0)

您可以将残差添加到组的最后一个元素,即

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)

显然,如果您的团队很大,这会积累错误。另一种方法是以“滚动”方式分配残差。