2017-07-20 3 views
-2

2つの日付の列の間の行をカウントしている列がDATE_FROMとDATE_TO、例の間: DATE_FROM パンダは、私は、行を数える必要

0 2017-07-01 2017-07-03 
1 2017-07-01 2017-07-05 
2 2017-07-02 2017-07-04 
3 2017-07-03 2017-07-04 

DATE_TO私はどのように行を数える必要があります。

私はこのデータフレームを持っています私がしようとしている

   count 
date 
2017-07-01 2 
2017-07-02 3 
2017-07-03 3 
2017-07-04 1 

:列DATE_FROMとDATE_TO、例の間であり

df.groupby(['date_from','date_to']).size() 

が、パンダは、行を数える一度

EDIT:

:私は2つの日付、 これだけで1行を持つデータフレームの間にある行数を数える必要

2017年7月1日1 2017年7月2日1

date_from  date_to 
0 2017-07-01 2017-07-03 

は、この出力を持っています

+1

答える人が自分の答えを削除している中で、これまでに3件の回答がありました。私は他の人に話すことができませんが、私はあなたが望むものについて混乱しているので私の答えを削除しました。サンプルデータフレームからどのようにあなたの期待される出力を得たかを示すことで、より明確にしてください。 – piRSquared

+0

[pandasデータフレームで設定した範囲内の日付の集計](https://stackoverflow.com/questions/36341081/counting-dates-in-a-range-set-by-pandas-dataframe) –

+0

@piRSquared i質問を編集した、私は余分な説明の助けを願って、私の英語のために申し訳ありません。 – Roberto

答えて

1

私はあなたが必要だと思う:stackによってdate_to

  • リシェイプから


    df['date_to'] = df['date_to'] - pd.to_timedelta(1, unit='d') 
    df = df.stack().rename_axis(('a','b')).reset_index(name='c').set_index('c') 
    df = df.groupby('a').resample('d').ffill().groupby('c').size().reset_index(name='a') 
    print (df) 
          c a 
    0 2017-07-01 2 
    1 2017-07-02 3 
    2 2017-07-03 3 
    3 2017-07-04 1 
    

    同様のソリューション:

    df['date_to'] = df['date_to'] - pd.to_timedelta(1, unit='d') 
    df = df.stack().rename_axis(('a','b')).reset_index(name='c').set_index('c') 
    df = df.groupby('a').resample('d')['b'].size().reset_index() 
    # 
    df = df['c'].value_counts().sort_index().rename_axis('a').reset_index() 
    print (df) 
          a c 
    0 2017-07-01 2 
    1 2017-07-02 3 
    2 2017-07-03 3 
    3 2017-07-04 1 
    

    そしてitertuplesを持つ別の解決策:

    df['date_to'] = df['date_to'] - pd.to_timedelta(1, unit='d') 
    
    df=pd.concat([pd.Series(r.Index, 
             pd.date_range(r.date_from, r.date_to)) for r in df.itertuples()]) 
         .reset_index() 
    
    df = df['index'].value_counts().sort_index().rename_axis('a').reset_index(name='c') 
    print (df) 
          a c 
    0 2017-07-01 2 
    1 2017-07-02 3 
    2 2017-07-03 3 
    3 2017-07-04 1 
    
  • 関連する問題