python - Pandas - 汇总两个值之间的两行之间的值

标签 python pandas

我一直在思考以更有效的方式总结数据框中两个值之间的值。

所以,我有这个数据框:

   Event   Value
   ==============
   Start   -
   Action  11
   Action  6
   Action  3
   End     -
   Start   -
   Action  8
   Action  6
   End     -

所以我想要做的是将 StartEnd 之间的所有值相加,并将该值存储在初始 Start

   Event    Value
   ==============
   Start   20
   Action  11
   Action  6
   Action  3
   End     -
   Start   14
   Action  8
   Action  6
   End     -

有没有办法在不使用循环的情况下做到这一点?

感谢您的帮助!

最佳答案

试试这个:

df['Value'] = df['Value'].replace('-', np.nan).astype(float)

df['Value'] = (df.groupby(df['Event'].eq('Start').cumsum())['Value']
                 .transform('sum')
                 .mask(df['Event'] != 'Start', df['Value'])
                 .fillna('-'))

输出:

    Event Value
1   Start    20
2  Action    11
3  Action     6
4  Action     3
5     End     -
6   Start    14
7  Action     8
8  Action     6
9     End     -

详细信息:

  • 对事件等于“Start”的事件的cumsum使用groupby,以 创建群组
  • 然后使用 transfrom 计算 sum 和 mask 事件不等于 从原始“值”开始
  • 然后使用fillna取回'-'字符

关于python - Pandas - 汇总两个值之间的两行之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59738815/

相关文章:

python - Pandas argsort 如何工作?我如何解释结果?

python - 用 pandas 计算比率

Python Pandas 绘制由 secondary_y 更改的图层顺序

python - 将任务添加到 python asyncio

python - 内存高效的最近邻算法

python - 将 gst-launch 命令转换为 Python 程序

python - 在python中使用tweepy从twitter获取所有关注者id的列表

python - 在python中创建一个没有重复的随机数列表

python - 从单列 Pandas 数据框生成词云

python - 查找并删除具有由第三个唯一特征标识的两个相同特征的重复数据条目