You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas按分钟与Operation计算Count的总和及Delta值?

需求说明

我有如下格式的CSV数据:

TimeCountOperation
10:01:002Up
10:01:005Down
10:01:001Down
10:01:002Up
10:01:001Up
10:02:003Down
10:02:002Up
10:02:005Down

需要完成两个步骤:

  1. 按分钟和Operation对Count列求和,得到结果:
    Sum():
TimeCountOperation
10:01:005Up
10:01:006Down
10:02:002Up
10:02:008Down
  1. 对同一分钟的Up和Down求和值做差(Down - Up),得到Delta列:
    Diff():
TimeDelta
10:01:001
10:02:006

我尝试了以下代码,但未能达到预期效果:

def Delta_Volume():
    df = pd.read_csv(Ex_Csv, usecols=['Time','Count','Operation'], parse_dates=[0])
    df['Time'] = df['Time'].dt.floor("T", 0).dt.time
    df1 = df.groupby('Operation').sum('Count')
    df2 = df.groupby('Operation').diff('Count')
    #df['Delt_of_row'] = df.loc[1 : 3,['Count' , 'Operation']].sum(axis = 1)
    #df['Delt_of_row'] = df.loc[1 : 3,['Count' , 'Operation']].diff(axis = 1)
    print(df1)
解决方案

你的代码问题在于分组时仅按Operation单字段分组,未同时关联Time,且diff方法的用法不符合需求。以下是正确实现:

完整代码

import pandas as pd

def Delta_Volume(Ex_Csv):
    # 读取CSV并解析时间列,按分钟取整
    df = pd.read_csv(Ex_Csv, usecols=['Time','Count','Operation'], parse_dates=['Time'])
    df['Time'] = df['Time'].dt.floor('T').dt.time
    
    # 按时间+操作类型分组求和
    sum_df = df.groupby(['Time', 'Operation'], as_index=False)['Count'].sum()
    print("Sum():")
    print(sum_df)
    
    # 透视表转换格式,计算Delta值
    pivot_df = sum_df.pivot(index='Time', columns='Operation', values='Count').fillna(0)
    pivot_df['Delta'] = pivot_df['Down'] - pivot_df['Up']
    delta_df = pivot_df[['Delta']].reset_index()
    print("\nDiff():")
    print(delta_df)

# 调用示例,替换为你的CSV文件路径
# Delta_Volume("your_data.csv")

关键说明

  1. 分组求和:使用groupby(['Time', 'Operation'])同时按时间和操作类型分组,确保同一分钟内的Up/Down分别统计求和,这是实现第一步需求的核心。
  2. 计算差值:通过pivot将Operation的Up/Down转为列,直接做减法得到Delta值,fillna(0)用于处理某一分钟仅存在一种操作的边界情况,避免出现NaN。

内容的提问来源于stack exchange,提问作者Show_man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 08:15:44