python - Bin使用累积和而不是python中的观察值
问题描述
假设我有一个数据框,其中有一列如下:
Weight
1
1
0.75
0.5
0.25
0.5
1
1
1
1
我想创建两个箱并在我的数据框中添加一列,显示每行所在的箱,但我不想对观察结果进行分箱(即前 5 个观察到箱 1,最后五个到箱2)。相反,我想在不改变列顺序的情况下进行分箱,以使每个箱的重量总和相等或尽可能接近相等。
所以,我希望结果是
Weight I want Not this
1 1 1
1 1 1
0.75 1 1
0.5 1 1
0.25 1 1
0.5 1 2
1 2 2
1 2 2
1 2 2
1 2 2
Pandas 中是否有内置的东西已经做到了这一点,或者有人可以分享任何关于如何实现这一点的想法吗?谢谢!
解决方案
这应该这样做:
df = pd.DataFrame(
{'Weight': [1, 1, 0.75, 0.5, 0.25, 0.5, 1, 1, 1, 1]})
weight_sum = df.Weight.sum()
df['bin'] = 1
df.loc[df.Weight.cumsum() > weight_sum / 2, 'bin'] = 2
print(df)
输出:
Weight bin
0 1.00 1
1 1.00 1
2 0.75 1
3 0.50 1
4 0.25 1
5 0.50 1
6 1.00 2
7 1.00 2
8 1.00 2
9 1.00 2
推荐阅读
- python - file_version_info.txt中的filevers/prodvers这四项是什么意思?
- android - 我如何实现这个设计?
- for-loop - 在创建活动之前检查日历是否有重复项
- sass - 当页面重新加载时,Gulp watch with Livereload 重新加载,或者自己
- ansible - 使用 jinja2 的 ansible 库存组
- reactjs - 选择时 React Native TextInput 缩小,我该如何停止它?
- java - 在 Quarkus-Camel 中的任何其他类之前调用一个类
- php - 在第 22 行的 /usr/local/lib/php/pear/common.php 中打开所需的 'PEAR.php' (include_path='.:/usr/local/lib/php/pear') 失败
- r - 替换超出范围的值是指 r 中每一行的另一个数据框
- javascript - 有什么很棒的方法可以从数组中留下每个单独的元素吗?