2016-12-19 3 views
0

私はいくつかのメッセージのビューとクリックに関する日付に関する情報をいくつか持っています。私は時間を四捨五入したビューとクリックをプロットしたいと思います。複数のメッセージの表示/クリックストリーム

私は、このようなデータフレームにデータを強要されました:

sl = pd.DataFrame({'index':sendlog.index, 
       'idMessage': sendlog['idMessage'], 
       'View': pd.to_datetime(sendlog['dtFirstView']).apply(lambda x: x.replace(minute=0, second=0)), 
       'Click': pd.to_datetime(sendlog['dtFirstClick']).apply(lambda x: x.replace(minute=0, second=0))}, 
       columns=('idMessage', 'View', 'Click') 
) 

sl.head(5)ショー:

idMessage View   Click 
0 728403 2016-12-12 05:00:00 NaT 
1 728403 2016-12-12 02:00:00 NaT 
2 727895 2016-12-12 15:00:00 NaT 
3 727918 2016-11-30 09:00:00 2016-11-30 09:00:00 
4 727895 2016-11-30 12:00:00 NaT 

は、いくつかのメッセージがクリックされていません - NaT値がそこにいます。

1時間ごとのビュー数とクリック数を持つすべてのメッセージについて、ヒストグラムのプロットを表示します。

Here's同様の質問ですが、1次元でのみグループ化されています。

私がグループ化し、各グループのサイズをカウントすると、結果としてnumpy.int64オブジェクトが得られたため、それらをプロットできません。

このようなことをどのようにプロットするのですか?

答えて

1

この

sl_ = sl.set_index('idMessage') 
cliks = sl_.Click.dropna() 
# I want the Timestamps in the index so I can use pd.TimeGrouper 
cliks = pd.Series(cliks.index.values, cliks.values) 
views = sl_.View.dropna() 
# I want the Timestamps in the index so I can use pd.TimeGrouper 
views = pd.Series(views.index.values, views.values) 

view_count = views.groupby([pd.TimeGrouper('H'), views]).count().rename('View') 
clik_count = cliks.groupby([pd.TimeGrouper('H'), cliks]).count().rename('Click') 

pd.concat([view_count, clik_count], axis=1).query('View >= 1 and Click >= 1') 

enter image description here

それを行う方法