【发布时间】:2019-03-19 20:25:56
【问题描述】:
我在 python 中获取 3D 数据帧的累积总和时遇到了一些困难。
我创建的示例数据框是:
import numpy as np
import pandas as pd
arr=np.array([[[23, 10],
[ 24, 5],
[ 28, 8],
[ 30, 11],
[ 31, 1]],
[[20, 11],
[21, 3],
[22, 5],
[29, 15],
[30, 10]],
[[22, 26],
[23, 29],
[25, 32],
[33, 10],
[34, 15]]])
names = ['x', 'y', 'z']
index = pd.MultiIndex.from_product([range(s)for s in arr.shape], names=names)
df = pd.DataFrame({'Day': arr.flatten()}, index=index)['Day']
df = df.unstack(level='z')
df.columns = ['Price', 'Qty']
df.index.names = ['DATE', 'i']
在指定的日期范围内,如果价格低于某个值(x),我想找到商品数量的总和。但是当总和超过某个数字(y)时,我会停止,无论其他商店或以后的日期是否还有满足最低要求。价格标准。我会先从最早的日期开始总结,在每个日期,从最低的价格开始总结。然后我会找到直到停止点的加权平均价格。
在上面的数据框中,假设我的标准是(1)日期 0 和 1,(2)价格等于或低于 25,(3)当数量总和首次超过 20 时停止。在这种情况下,相关数据是日期 0 的价格 23 和 24,日期 1 的价格 20。这是因为日期 0 的价格 23 和 24 的数量之和为 15,因此小于 20,但加上日期 1 的价格 20 的数量,则cumsum 变为 26,因此该过程停止。因此加权平均值为 (23*10)+(24*5)+(20*5) / 20
我目前的方法太麻烦了,使用while循环遍历时间轴,并为每个日期使用另一个while循环,这样如果价格比我的标准便宜,我会将数量和价格加权数量添加到跟踪总和。当跟踪总和大于指定值时,我将停止该过程并计算加权平均值。然后我也可以返回进程停止的位置。
想就如何以更有效的方式实现这一目标获得一些建议吗?
【问题讨论】:
-
很容易完成,但如果您提供具有所需输出的MCVE,您将更有可能得到答案
-
嗨乔希,谢谢你的建议。我现在已经包含了一个代码来生成一个示例数据框并将一些数字放在所需的输出上。希望这将有助于使事情更清楚?