具有多列的命名聚合

2024-05-16 07:35:22 发布

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

我试图在聚合语句中应用以下两个imputs函数,但得到了一个不可损坏的类型:“list”TypeError:

from datetime import datetime

def process_difftime(x, y, start, final):
  t1 = []
  t2 = []
  for i in x.index:
    if x[i] == start:
      t1.append(y[i])
    elif x[i] == final:
      t2.append(y[i])
  res = round((max(t2) - max(t1)).total_seconds()/3600, 2)
  return res

List0 = pd.Series(['A10000','A10000','A10001','A10001'], index=[2,3,4,5])
List1 = pd.Series(['A_Create','A_Accepted','A_Create','A_Accepted'], index=[2,3,4,5])
List2 = pd.Series(['2016-08-03 15:57:21','2016-08-03 16:57:21','2016-08-03 15:57:21','2016-08-03 19:57:21'], index=[2,3,4,5])
List2 = pd.Series([datetime.strptime(x,'%Y-%m-%d %H:%M:%S') for x in List2], index=[2,3,4,5])

df = pd.DataFrame({
    'code':List0,
    'instance':List1,
    'timestamp':List2
})

df.groupby(['code']) \
  .agg(
      a_concept_difftime = (['instance','timestamp'], lambda x,y: process_difftime(x,y,'A_Create','A_Accepted'))
  )

有什么建议吗

期望输出

code    a_concept_difftime
A10000  1.0
A10000  4.0

其他细节:我正在使用一个大型日志事件数据集,它对应于半标准化流程的执行,大约有60个不同的实例(流程的阶段)和3个不同的时间戳(计划、开始、完成)。该函数的目标是选择实例列和时间戳类型,以计算两个实例之间的小时差(组合可能会改变)


Tags: 实例函数类型datetimeindexcreatecodeseries
1条回答
网友
1楼 · 发布于 2024-05-16 07:35:22

经过几个小时的寻找解决方案,我发现这个贡献满足了我的问题

df.groupby('code') \
  .apply(lambda x: pd.Series({
      'a_accepted_time':process_difftime(x['instance'], x['timestamp'], 'A_Create', 'A_Concept')
  }))

我还发现元组命名的聚合不能处理多个列,如本文https://github.com/pandas-dev/pandas/issues/29268中所述

感谢@r2evans的贡献https://stackoverflow.com/a/53096340/12514619

相关问题 更多 >