PythonPandas我可以通过另一列的ID以分钟为增量计算列值的增量吗?

4jb9z9bj  于 2023-01-11  发布在  Python
关注(0)|答案(2)|浏览(119)

我有一个如下所示的Csv文件
| 时间|计数|操作|
| - ------| - ------| - ------|
| 十点零一分|第二章|向上|
| 十点零一分|五个|向下|
| 十点零一分|1个|向下|
| 十点零一分|第二章|向上|
| 十点零一分|1个|向上|
| 十点零二分|三个|向下|
| 十点零二分|第二章|向上|
| 十点零二分|五个|向下|
我想用operations列的id将每分钟的count列的值相加,然后在同一分钟内将up和down的总和相减,结果如下所示
Sum()
| 时间|计数|操作|
| - ------| - ------| - ------|
| 十点零一分|五个|向上|
| 十点零一分|六个|向下|
| 十点零二分|第二章|向上|
| 十点零二分|八个|向下|
Diff()
| 时间|德尔塔|
| - ------| - ------|
| 十点零一分|1个|
| 十点零二分|六个|
为了做到这一点,我尝试了以下方法

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)

但不幸的是,它并没有按照我需要的方式工作

ff29svar

ff29svar1#

您可以从经典的GroupBy.sum开始,然后使用MultiIndex计算差值:

df2 = df.groupby(['Operation', 'Time']).sum()
print(df2)

out = df2.loc['Down']-df2.loc['Up']
print(out)

输出:

# groupby.sum
                    Count
Operation Time           
Down      10:01:00      6
          10:02:00      8
Up        10:01:00      5
          10:02:00      2

# difference
          Count
Time           
10:01:00      1
10:02:00      6
rdrgkggo

rdrgkggo2#

def function1(dd:pd.DataFrame):
    return dd.Count.diff(-1).head(1)

df1.groupby(['Time','Operation'],as_index=False).sum()\
    .groupby('Time').apply(function1).droplevel(1)

出局

Count
Time           
10:01:00      1
10:02:00      6

相关问题