[英]Pandas: counting unique datetime values in group by gives weird values
所以我得到了這個DataFrame,以一種方式構建,以便列id
等於2,我們在列num
和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]
})
為方便起見,這是一個可讀的視覺中的DataFrame:
如果我想計算每個id
的唯一值的數量,我會這樣做
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
時間上的計數唯一值(在Pandas中轉換為datetime64[ns]
)類型不起作用?
這是bug,請參閱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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.