gpt4 book ai didi

python - 对一列进行分组,使其每组中的总和大致相等

转载 作者:行者123 更新时间:2023-11-30 22:43:57 25 4
gpt4 key购买 nike

将均匀分布的值排序到预定义数量的组中的最简单方法是什么?

data = {'impact':[10,30,20,10,90,60,50,40]}
df = pd.DataFrame(data,index=['a','b','c','d','e','f','g','h'])

print df

impact
a 10
b 30
c 20
d 10
e 90
f 60
g 50
h 40

numgroups = 4

group_targetsum = round(df.impact.sum() / numgroups, -1)

print group_targetsum

80.0

在上面的例子中,我想从 df 创建 4 个组。唯一的排序标准是每个组中的影响力总和应约等于group_targetsum。影响总和可以在合理的范围内高于或低于 group_targetsum。

最终,我想将这些组分离到它们自己的数据帧中,保留索引。结果是这样的:

print df_a

impact
e 90

print df_b

impact
c 20
f 60

print df_c

impact

a 10
d 10
g 50

print df_d

impact

b 30
h 40

生成的数据帧不需要完全是这样,只要它们的总和尽可能接近 group_targetsum 即可。

最佳答案

假设该系列中的值相当相似,这里有一种使用 searchsorted 的方法-

In [150]: df
Out[150]:
impact
a 10
b 30
c 20
d 10
e 90
f 60
g 50
h 40

In [151]: a = df.values.ravel()

In [152]: shift_num = group_targetsum*np.arange(1,numgroups)

In [153]: idx = np.searchsorted(a.cumsum(), shift_num,'right')

In [154]: np.split(a, idx)
Out[154]: [array([10, 30, 20, 10]), array([90]), array([60]), array([50, 40])]

关于python - 对一列进行分组,使其每组中的总和大致相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41639804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com