pandas 保留余数对分组进行除法
pandas division on groupby keeping remainder
我想以 2 位精度对列执行除法,但我需要确保它在 groupby 级别上总和达到所需的数字 (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
您可以将残差添加到组的最后一个元素,即
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)
仍然很明显,如果你有一个大团队,这会累积错误。另一种方法是以 "rolling" 方式分配残差。
我想以 2 位精度对列执行除法,但我需要确保它在 groupby 级别上总和达到所需的数字 (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
您可以将残差添加到组的最后一个元素,即
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)
仍然很明显,如果你有一个大团队,这会累积错误。另一种方法是以 "rolling" 方式分配残差。