所以我得到了这个DataFrame,其构建方式使列num
等于2,我们在列my_date
和import 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:
如果我想计算每个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
给出了这个奇怪的(?)结果:
看起来datetime64[ns]
(在Pandas转换为<^>
)类型中的计数唯一值无效?
答案 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