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()
解决方案
定义一个函数,计算“in”和“out”时间之间的秒数,从一组 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”的 2 个连续行),
- 应用上述函数,计算此“期间”的总秒数,
- 按面积对上述结果进行分组并计算均值。
执行此操作的代码是:
df.groupby(np.arange(len(df.index)) // 2).apply(fn).groupby('area').mean()
对于您的数据,结果是:
secs
area
K1 1579650
K3 2420100
K5 5299200
如果您愿意,可以将其转换为例如Timedelta。
推荐阅读
- c# - 如何找出哪个nuget包导致异常?
- python - 用“空格和数字”Python ex: ASSESSMENT _2/28 替换单个数字
- python - 'AnonymousUser' 对象没有属性 '_meta' | 姜戈
- python - 重定向在 django 中重定向时无法正确转换特殊字符
- sql - 你如何转换查询的行和列
- r - 错误 Rstudio - GoogleAnalytics(错误:返回的 API:请求的身份验证范围不足。)
- python - FAST_API 模型预测 (LGBM) 始终返回 0
- javascript - 在 create.js 上控制蛇的大小
- kubernetes - 跨命名空间共享存储类
- kubernetes - 是否可以创建 Kubernetes RBAC 规则来禁止创建负载均衡器?