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

时间:2016-04-30 20:48:14

标签: python python-3.x pandas dataframe

我有以下数据框:

'ID3'

我希望找到不同条目之间的差异 - 按transform()分组。

我想在GroupBy上使用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

我想要实现的目标是在几秒钟内代表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 然后在一个链式调用中提取秒数,如下所示:

df_2['diff']

有没有办法在transform的一个步骤中实现此目标(TimeDelta的值为秒),而不必在此过程中采取几个步骤?

最后,我已尝试在transform转换为using System; namespace Tests { class Class1 { public void myName() { Console.Write(myName); } } } 但没有取得任何成功。

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

来自transform()

更新: class NDFrameGroupBy(GroupBy)似乎无法进行预测并按预期工作:

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

来自transform()的{​​{1}}尝试执行以下操作:

class SeriesGroupBy(GroupBy)

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

OLD回答:

试试这个:

result = _possibly_downcast_to_dtype(result, dtype)