如何避免日期排序和分组时出现Typeerror



我有一个示例数据框架,如下所示

df=pd.DataFrame({'Adm DateTime':['02/25/2012 09:40:00','03/05/1996 09:41:00','11/12/2010 10:21:21','31/05/2012 04:21:31','21/07/2019 13:15:02','31/10/2020 08:21:00'],
's_id':[1,1,1,1,2,2],
't_id':['t1','t2','t3','t3','t4','t5']})
df['Adm DateTime'] = pd.to_datetime(df['Adm DateTime'])

我想为每个组(s_id)生成行号

我试过下面的

df['R_N'] = df.sort_values(['Adm DateTime'], ascending=True).groupby(['s_id']).cumcount() + 1

虽然这在样本数据中有效,但在原始数据中会抛出以下错误。

TypeError: '<'在'datetime.datetime'实例之间不支持和"str">

但是在我原来的Adm DateTime列中没有NA,列本身的数据类型是datetime64[ns]。我不会显式地在日期之间执行任何比较(除了可能在内部完成的排序)

我可以知道为什么会发生这个错误,我如何识别导致这个问题的记录吗?

您可以尝试拆分解决方案,因为在您的解决方案中,如果链排序和创建新列熊猫必须通过原始索引在内部重新排序行,我想这应该是问题(输出没有排序行)。

df['R_N'] = (df.sort_values(['Adm DateTime'], ascending=True)
.groupby(['s_id']).cumcount() + 1)
print (df)
Adm DateTime  s_id t_id  R_N
0 2012-02-25 09:40:00     1   t1    3
1 1996-03-05 09:41:00     1   t2    1
2 2010-11-12 10:21:21     1   t3    2
3 2012-05-31 04:21:31     1   t3    4
4 2019-07-21 13:15:02     2   t4    1
5 2020-10-31 08:21:00     2   t5    2

如果需要这个输出,可能的想法应该是创建唯一的索引值:

df = df.reset_index(drop=True)
df['R_N'] = (df.sort_values(['Adm DateTime'], ascending=True)
.groupby(['s_id']).cumcount() + 1)

我的解决方案在排序后创建新的DataFrame,因此不需要重新排序或行(并且输出已排序行)

df['Adm DateTime'] = pd.to_datetime(df['Adm DateTime'])
df = df.sort_values(['Adm DateTime'])
df['R_N'] = df.groupby(['s_id']).cumcount() + 1
print (df)
Adm DateTime  s_id t_id  R_N
1 1996-03-05 09:41:00     1   t2    1
2 2010-11-12 10:21:21     1   t3    2
0 2012-02-25 09:40:00     1   t1    3
3 2012-05-31 04:21:31     1   t3    4
4 2019-07-21 13:15:02     2   t4    1
5 2020-10-31 08:21:00     2   t5    2

相关内容

最新更新