假设我们有这些数据:
df = pd.DataFrame({
'group_id': [100,100,100,101,101,101,101],
'amount': [30,40,10,20,25,80,40]
})
df.index.name = 'id'
df.set_index(['group_id', df.index], inplace=True)
看起来是这样的:
amount
group_id id
100 0 30
1 40
2 10
101 3 20
4 25
5 80
6 40
我们的目标是计算一个新的列,它是所有小于当前列的量的总和。也就是说,我们想要这个结果。你知道吗
amount sum_of_smaller_amounts
group_id id
100 0 30 10
1 40 40 # 30 + 10
2 10 0 # smallest amount
101 3 20 0 # smallest
4 25 20
5 80 85 # 20 + 25 + 40
6 40 45 # 20 + 25
理想情况下,这应该是(非常)有效的,因为真正的数据帧可以是数百万行。你知道吗
我在
pandas
方面处于中等水平,不确定效率,但这里有一个解决方案:结果:
如果最后一行有助于提高效率,您可以用它们代替:
更好的解决方案(我认为):
输出:
另一种方法是使用笛卡尔积和过滤器:
输出:
您需要
sort_values
和cumsum
:输出:
更新:修复重复值:
输出(注意组100中的两个值30)
相关问题 更多 >
编程相关推荐