gpt4 book ai didi

python - GroupBy - 如何使用 diff() 从 DateTime 中提取秒数

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:59 24 4
gpt4 key购买 nike

我有以下数据框:

In [372]: df_2
Out[372]:
A ID3 DATETIME
0 B-028 b76cd912ff 2014-10-08 13:43:27
1 B-054 4a57ed0b02 2014-10-08 14:26:19
2 B-076 1a682034f8 2014-10-08 14:29:01
3 B-023 b76cd912ff 2014-10-08 18:39:34
4 B-023 f88g8d7sds 2014-10-08 18:40:18
5 B-033 b76cd912ff 2014-10-08 18:44:30
6 B-032 b76cd912ff 2014-10-08 18:46:00
7 B-037 b76cd912ff 2014-10-08 18:52:15
8 B-046 db959faf02 2014-10-08 18:59:59
9 B-053 b76cd912ff 2014-10-08 19:17:48
10 B-065 b76cd912ff 2014-10-08 19:21:38

我想找出不同条目之间的区别 - 按 'ID3' 分组。

我正尝试在 GroupBy 上使用 transform(),如下所示:

In [379]: df_2['diff'] = df_2.sort_values(by='DATETIME').groupby('ID3')['DATETIME'].transform(lambda x: x.diff()); df_2['diff']
Out[379]:
0 NaT
1 NaT
2 NaT
3 1970-01-01 04:56:07
4 NaT
5 1970-01-01 00:04:56
6 1970-01-01 00:01:30
7 1970-01-01 00:06:15
8 NaT
9 1970-01-01 00:25:33
10 1970-01-01 00:03:50
Name: diff, dtype: datetime64[ns]

我也尝试过将 x.diff().astype(int) 用于 lambda,结果完全相同。

'DATETIME''diff' 的数据类型都是:datetime64[ns]

我想要实现的是让 diff 以秒为单位表示,而不是与 Epoch 时间相关的某个时间。

我发现我可以将 df_2['diff'] 转换为 TimeDelta,然后在此时的一个链式调用中提取秒数,如下所示:

In [405]: df_2['diff'] = pd.to_timedelta(df_2['diff']).map(lambda x: x.total_seconds()); df_2['diff']
Out[407]:
0 NaN
1 NaN
2 NaN
3 17767.0
4 NaN
5 296.0
6 90.0
7 375.0
8 NaN
9 1533.0
10 230.0
Name: diff, dtype: float64

有没有一种方法可以在 transform 的一个步骤中实现这一点(以秒作为 df_2['diff'] 的值),而不必花费几个时间过程中的步骤?

最后,我已经尝试在 transform 中转换为 TimeDelta,但没有成功。

感谢您的帮助!

最佳答案

更新: class NDFrameGroupBy(GroupBy) 中的 transform() 似乎没有进行向下转换并按预期工作:

In [220]: (df_2[['ID3','DATETIME']]
.....: .sort_values(by='DATETIME')
.....: .groupby('ID3')
.....: .transform(lambda x: x.diff().dt.total_seconds())
.....: )
Out[220]:
DATETIME
0 NaN
1 NaN
2 NaN
3 17767.0
4 NaN
5 296.0
6 90.0
7 375.0
8 NaN
9 1533.0
10 230.0

class SeriesGroupBy(GroupBy) 中的 transform() 尝试执行以下操作:

result = _possibly_downcast_to_dtype(result, dtype)

这可能(我不确定)会导致您的问题

旧答案:

试试这个:

In [168]: df_2.sort_values(by='DATETIME').groupby('ID3')['DATETIME'].diff().dt.total_seconds()
Out[168]:
0 NaN
1 NaN
2 NaN
3 17767.0
4 NaN
5 296.0
6 90.0
7 375.0
8 NaN
9 1533.0
10 230.0
dtype: float64

关于python - GroupBy - 如何使用 diff() 从 DateTime 中提取秒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36960086/

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