gpt4 book ai didi

python Pandas : diff between 2 dates in a groupby

转载 作者:太空狗 更新时间:2023-10-29 20:15:10 26 4
gpt4 key购买 nike

使用 Python 3.6 和 Pandas 0.19.2:

我有一个 DataFrame,其中包含已解析的事务日志文件。每行都有时间戳,包含一个事务 ID,并且可以表示事务的开始或结束(因此每个事务 ID 有 1 行开始和 1 行结束)。

附加信息也可以出现在每个结束行中。

我想通过用开始日期减去结束日期来提取每笔交易的持续时间,并保留其他信息。

示例输入:

import pandas as pd
import io
df = pd.read_csv(io.StringIO('''transactionid;event;datetime;info
1;START;2017-04-01 00:00:00;
1;END;2017-04-01 00:00:02;foo1
2;START;2017-04-01 00:00:02;
3;START;2017-04-01 00:00:02;
2;END;2017-04-01 00:00:03;foo2
4;START;2017-04-01 00:00:03;
3;END;2017-04-01 00:00:03;foo3
4;END;2017-04-01 00:00:04;foo4'''), sep=';', parse_dates=['datetime'])

它给出了以下 DataFrame:

   transactionid  event             datetime  info
0 1 START 2017-04-01 00:00:00 NaN
1 1 END 2017-04-01 00:00:02 foo1
2 2 START 2017-04-01 00:00:02 NaN
3 3 START 2017-04-01 00:00:02 NaN
4 2 END 2017-04-01 00:00:03 foo2
5 4 START 2017-04-01 00:00:03 NaN
6 3 END 2017-04-01 00:00:03 foo3
7 4 END 2017-04-01 00:00:04 foo4

预期输出:

一个新的数据框,例如:

   transactionid           start_date             end_date  duration  info
0 1 2017-04-01 00:00:00 2017-04-01 00:00:02 00:00:02 foo1
1 2 2017-04-01 00:00:02 2017-04-01 00:00:03 00:00:01 foo2
2 3 2017-04-01 00:00:02 2017-04-01 00:00:03 00:00:01 foo3
3 4 2017-04-01 00:00:03 2017-04-01 00:00:04 00:00:01 foo4

我尝试过的:

由于连续 2 行并不总是与同一笔交易相关,因此我将 .groupby(by='transactionid') 应用于我的数据框。我现在无法根据自己的需要尝试“扁平化”每个组。

最佳答案

试试这个:

df.datetime = pd.to_datetime(df.datetime)

funcs = {
'datetime':{
'start_date': 'min',
'end_date': 'max',
'duration': lambda x: x.max() - x.min(),
},
'info': 'last'
}

df.groupby(by='transactionid')['datetime','info'].agg(funcs).reset_index()

结果:

In [103]: df.groupby(by='transactionid')['datetime','info'].agg(funcs).reset_index()
Out[103]:
transactionid start_date end_date duration last
0 1 2017-04-01 00:00:00 2017-04-01 00:00:02 00:00:02 foo1
1 2 2017-04-01 00:00:02 2017-04-01 00:00:03 00:00:01 foo2
2 3 2017-04-01 00:00:02 2017-04-01 00:00:03 00:00:01 foo3
3 4 2017-04-01 00:00:03 2017-04-01 00:00:04 00:00:01 foo4

关于 python Pandas : diff between 2 dates in a groupby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43611263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com