首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫:如何在一列条件下进行分段计算

熊猫:如何在一列条件下进行分段计算
EN

Stack Overflow用户
提问于 2022-02-16 15:16:04
回答 1查看 61关注 0票数 0

我有这样的数据:

代码语言:javascript
运行
复制
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。例如,我可以看到这样的数据:

代码语言:javascript
运行
复制
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变量而挣扎。你能给我一些提示或解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-17 19:46:27

首先,我们要为每个"group"计算这个值,所以我们需要df.groupby("group")。然后,对于每个组,您可以使用df_group.max()获得“结束时间”。现在,要计算“时间到区段结束”,我们只需减去值:df_group["Time"].max() - df_group["Time"]。这是因为这是一个“向量化”操作。最后,可以将卷乘以,然后使用.sum()添加所有内容。

代码语言:javascript
运行
复制
for group, df_group in df.groupby("group"):
    result = (df_group["Volume"] * (df_group["Time"].max() - df_group["Time"])).sum()
    print(group, result)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71144447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档