我有以下数据框:
'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);
}
}
}
但没有取得任何成功。
感谢您的帮助!
答案 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)