我有这样的数据:
symbol Time Volume cumVolume group ...
00001 0 100 100 0 ...
00001 3 100 200 0 ...
00001 7 -200 0 0 ...
00001 12 -100 -100 1 ...
00001 13 -200 -300 1 ...
00001 18 300 0 1 ...
00002 0 -100 -100 2 ...
00002 4 -100 -200 2 ...
00002 7 100 -100 2 ...
00002 13 300 200 2 ...
00002 15 300 500 3 ...
我想对每个符号的子数据进行计算,除以group
。例如,我可以看到这样的数据:
symbol Time Volume cumVolume group ...
00001 0 100 100 0 ...
00001 3 100 200 0 ...
00001 7 -200 0 0 ...
----------------------------------------------------
00001 12 -100 -100 1 ...
00001 13 -200 -300 1 ...
00001 18 300 0 1 ...
----------------------------------------------------
00002 0 -100 -100 2 ...
00002 4 -100 -200 2 ...
00002 7 100 -100 2 ...
00002 13 300 200 2 ...
----------------------------------------------------
00002 15 300 500 3 ...
计算规则是:Volume
* Time to section end
例如,对于第一部分:(100)*(7-0) + (100)*(7-3) + (-200)*(7-7)
第二节:(-100)*(18-12) + (-200)*(18-13) + (300)*(18-18)
我正在为如何获得Time to section end
变量而挣扎。你能给我一些提示或解决办法吗?
发布于 2022-02-17 19:46:27
首先,我们要为每个"group"
计算这个值,所以我们需要df.groupby("group")
。然后,对于每个组,您可以使用df_group.max()
获得“结束时间”。现在,要计算“时间到区段结束”,我们只需减去值:df_group["Time"].max() - df_group["Time"]
。这是因为这是一个“向量化”操作。最后,可以将卷乘以,然后使用.sum()
添加所有内容。
for group, df_group in df.groupby("group"):
result = (df_group["Volume"] * (df_group["Time"].max() - df_group["Time"])).sum()
print(group, result)
https://stackoverflow.com/questions/71144447
复制相似问题