簡體   English   中英

Pandas:計算group by中的唯一日期時間值,給出奇怪的值

[英]Pandas: counting unique datetime values in group by gives weird values

所以我得到了這個DataFrame,以一種方式構建,以便列id等於2,我們在列nummy_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']

這給出了這個奇怪的(?)結果:

grouped_dataframe

看起來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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM