2017-03-05 10 views
1

ある列のデータを別の列のデータでグループ化しようとしていますが、特定の時間範囲のデータのみが必要です。だから2015年11月1日〜2016年4月30日に座ってみましょう。私のデータベースは、このようなものになります。Pythonのユーザーによるグループデータ

account_id employer_key login_date 
    1111111  google   2016-03-03 20:58:36.000000 
    2222222  walmart   2015-11-18 11:52:56.000000 
    2222222  walmart   2015-11-18 11:53:14.000000 
    1111111  walmart   2016-04-06 23:29:04.000000 
    3333333  walmart   2015-09-05 14:13:53.000000 
    3333333  walmart   2016-01-28 03:20:58.000000 
    2222222  walmart   2015-09-03 00:11:38.000000 
    1111111  walmart   2015-09-03 00:12:25.000000 
    1111111  dell_inc   2015-11-13 01:59:59.000000 

を私はこのようになります出力を取得しようとしています:

account_id    login_date 
    1111111    3 
    2222222    2 
    3333333    1 

にはどうすれば一定時間ACCOUNT_ID年代から独自の合計を得ることについて行くことができます窓?

答えて

2

最初にあなたのDFをフィルタリングして、.groupby().count()を使用することができます。

In [213]: df.query("'2015-11-01' <= login_date <= '2016-04-30'") \ 
      .groupby('account_id')['login_date'] \ 
      .count() \ 
      .reset_index() 
Out[213]: 
    account_id login_date 
0  1111111   3 
1  2222222   2 
2  3333333   1 

またあなたの代わりにdf.query(...)boolean indexingdf.loc[...])を使用することができますが、それは少しかさばるなります...

1

betweenを使用し、 value_counts

v = pd.value_counts(df.account_id[df.login_date.between('2015-11-01', '2016-04-30')]) 
v.rename_axis('account_id').reset_index(name='login_date') 

    account_id login_date 
0  1111111   3 
1  2222222   2 
2  3333333   1 
関連する問題