【发布时间】:2020-02-13 18:34:02
【问题描述】:
我正在使用具有 800k 记录的数据框,并希望构建一种更快的方法来获取总和条件与我当前运行 df.iterrows() 的工作版本之间的索引值。我有一列我想总结一个值,然后重置总和索引起始位置以重新开始循环。
一个简单的例子是任何超过 1000 的总和。
series = [193, 371, 163, 287, 627, 323, 382, 263, 361, 501, 282, 411, 335, 528, 396, 465, 309, 243, 348, 387, 416, 446, 464, 227, 301]
series = pd.Series(series)
target_value = 1000
start = 0
end = 0
sum_values = series[start:end+1].sum()
index_values = []
for indx, val in series.iteritems():
if sum_values >= target_value:
index_values.append([start, end])
sum_values = series[end+1]
start = end
end += 1
else:
sum_values = series[start:end+1].sum()
end += 1
index_values:
[[0, 4], [4, 7], [7, 10], [10, 13], [13, 16], [16, 20], [20, 23]]
我不知道如何使用 numpy where 函数执行此操作,一旦超过一个值就会重置。
任何方向的帮助将不胜感激。
【问题讨论】:
-
没有向量化的方法可以直接处理这个问题,请查看
numba的迭代解决方案,应该一样快。请发布minimal reproducible example 并查看How to Ask。 -
s = pd.cut(df.index, [0,26,78,85], include_lowest=True); df.groupby(s).sum() -
stackoverflow.com/questions/56904390/… 如果得到答案,它可能会像重复一样关闭。你不可能得到比那个问题更好的答案。
-
@ALollz 我没有看到那个帖子。我会看看。谢谢
-
@ALollz 您在上面提供的链接非常有帮助。谢谢
标签: python pandas numpy vectorization