计算组中的平均时间,数据帧

2024-04-19 20:57:28 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我需要根据面积来计算平均时间:

      id  direction     area    when
 2   220      in         K1    2014-09-01 02:00
 3   220     out         -     2014-09-03 12:20
 6   826      in         K3     2014-11-11 10:00
 7   826     out         -     2014-12-09 10:15
 9   901      in         K1     2014-09-01 10:05
 10  901     out         -     2014-10-05 13:20
 11  901      in         K5     2014-09-01 15:00
 12  901     out         -     2014-11-01 23:00

我想按区域对df进行分组,然后检查每个区域的平均时间。

我试着简单地创建一个新的列,并得到不同之处。什么都没发生。。。你知道吗

df['When']=pd.to_datetime(df['When'], format='%Y/%m/%d %H:%M')

for a in range(df.shape[0],-1,1): 
   df['Time_diff'][i+1] = datetime.datetime.min+ ( df['when][i+1]-df['when'][i])).time() 

Tags: inid区域dfdatetime时间k1area
1条回答
网友
1楼 · 发布于 2024-04-19 20:57:28

定义一个函数,计算“输入”和“输出”时间之间的秒数, 从一组2行中,同时返回区域代码:

def fn(grp):
    return pd.Series([grp.iloc[0, 2], int((grp.iloc[1, 3]
        - grp.iloc[0, 3]).total_seconds())], index=['area', 'secs'])

那么我们的想法是:

  • 将源行分组成对(“in”和“out”为两个连续行)
  • 应用上述函数,计算此“期间”的总秒数
  • 将上述结果按面积分组,计算平均值。你知道吗

执行此操作的代码是:

df.groupby(np.arange(len(df.index)) // 2).apply(fn).groupby('area').mean()

对于您的数据,结果是:

         secs
area         
K1    1579650
K3    2420100
K5    5299200

如果您愿意,您可以将其转换为例如时间增量。你知道吗

相关问题 更多 >