gpt4 book ai didi

python - 每当超过某个 cumsum 阈值时如何对 pandas 行进行分组(为每个新组重新启动 cumsum)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:54:42 24 4
gpt4 key购买 nike

每当超过给定的 cumsum 阈值时,我需要有关对连续行进行分组的帮助。当超过此阈值时,也应重新启动 cumsum(为零),如下所示:

Index  Values       Regular CumSum  Wanted CumSum  Wanted Column
1 0.0666666666 0.0666666666 0.000000 0.0
2 0.0238095238 0.0904761904 0.000000 1.0
3 0.0134146341 0.1038908246 0.000000 2.0
4 0.0210135970 0.1249044216 0.013414 2.0
5 0.0072639225 0.1321683441 0.000000 3.0
6 0.0158536585 0.1480220027 0.007263 3.0
7 0.0012004801 0.1492224829 0.000000 4.0
8 0.0144230769 0.1636455598 0.001200 4.0
9 0.0130331753 0.1766787351 0.015623 4.0

在这种情况下,阈值是 0.02(对不起所有小数)。

  • 任何大于阈值的条目都应立即形成或关闭一个组(例如索引 1,2 和 4 中的条目)
  • 索引 3 上的条目小于阈值,因此它等待下一个连续条目。如果下一个条目(单独或与索引 3 的值相加)超过阈值,则它们形成一个新组,否则下一个下一个条目也将被包括在内(在这种情况下,索引 4 的条目大于阈值,因此形成一个新组).
  • 条目 5 小于阈值 0.02,但对条目 6 求和,使它们大于 0.02,因此一个组被关闭。
  • 条目 7、8 和 9 加在一起大于 0.02,因此形成一个组。
  • ....

我能够开发以下简单代码来实现这一点,但我希望有人可以帮助我开发一种更快的方法,也许可以利用 pandas 库:

FinalList = [0]
index=0
cumsum = 0
i=1
#while to go through all entries in df
while(i!=df.index[-1]):
#When entry is larger(or equal) than threshold immediately close group and clear cumsum
if df.Values.iloc[i] >= Threshold:
FinalList.append(index)
cumsum = 0
index+=1
#When entry is smaller than threshold
if df.Values.iloc[i] < Threshold:
#If previous cumsum plus current entry surpass threshold group is closed.
if cumsum + df.Values.iloc[i] > Threshold:
FinalList.append(index)
cumsum=0
index+=1
#Otherwise, continue increasing cumsum until it crosses threshold
else:
cumsum = cumsum + df.Values.iloc[i]
FinalList.append(index)
i+=1

最佳答案

更多的 pandas 方法是遍历数据框或列,如下所示:

threshold = 0.02
cumsum = 0
group = 0
for idx, value in df.Values.iteritems():
cumsum += value
df.loc[idx, 'Group'] = group
if cumsum >= threshold:
cumsum = 0
group += 1
         Values  Group
Index
1 0.066667 0.0
2 0.023810 1.0
3 0.013415 2.0
4 0.021014 2.0
5 0.007264 3.0
6 0.015854 3.0
7 0.001200 4.0
8 0.014423 4.0
9 0.013033 4.0

这并没有做任何特别花哨的事情,但应该更快,因为它减少了索引操作和一般操作。如果你想了解更多关于如何编写pandas风格的代码,我推荐this其开发者之一的博客系列。

关于python - 每当超过某个 cumsum 阈值时如何对 pandas 行进行分组(为每个新组重新启动 cumsum),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54936192/

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