Pandas:计算group by中的唯一日期时间值,给出奇怪的值

时间:2017-01-11 17:32:29

标签: python datetime pandas dataframe group-by

所以我得到了这个DataFrame,其构建方式使列num等于2,我们在列my_dateimport pandas as pd a = pd.DataFrame({'id': [1, 2, 3, 2], 'my_date': [datetime(2017, 1, i) for i in range(1, 4)] + [datetime(2017, 1, 1)], 'num': [2, 3, 1, 4] }) 中有两个不同的值:

id

为方便起见,这是一个可读的视觉中的DataFrame:

dataframe

如果我想计算每个grouped_a = a.groupby('id').agg({'my_date': pd.Series.nunique, 'num': pd.Series.nunique}).reset_index() grouped_a.columns = ['id', 'num_unique_num', 'num_unique_my_date'] 的唯一值的数量,我会做

datetime

给出了这个奇怪的(?)结果:

grouped_dataframe

看起来datetime64[ns](在Pandas转换为<^>)类型中的计数唯一值无效?

1 个答案:

答案 0 :(得分:4)

这是错误,请参阅github 14423

但你可以使用效果很好的SeriesGroupBy.nunique

grouped_a = a.groupby('id').agg({'my_date': 'nunique', 
                                 'num': 'nunique'}).reset_index()
grouped_a.columns = ['id', 'num_unique_num', 'num_unique_my_date']
print (grouped_a)
   id  num_unique_num  num_unique_my_date
0   1               1                   1
1   2               2                   2
2   3               1                   1

如果DataFrame只有3列,您可以使用:

grouped_a = a.groupby('id').agg(['nunique']).reset_index()
grouped_a.columns = ['id', 'num_unique_num', 'num_unique_my_date']
print (grouped_a)
   id  num_unique_num  num_unique_my_date
0   1               1                   1
1   2               2                   2
2   3               1                   1