2017-07-20 54 views
-2

我需要算上行具有的列date_from和DATE_TO,例如:熊貓算上兩個日期列之間的行

我有這樣的數據幀: date_from DATE_TO

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_from和DATE_TO,例如之間有:

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

我已經與努力:

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

但大熊貓算一排一次

編輯:

我需要算多少行是兩個日期, 數據框,只有有一行與此之間:

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

有這樣的輸出: 2017-07-01 1 2017-07-02 1

+1

有迄今一直三個答案中,人民15:29刪除了他們的答案。我不能爲其他人說話,但我刪除了我的答案,因爲我對你想要的東西感到困惑。您能否通過展示您從示例數據框到預期輸出的方式來更清楚地說明問題? – piRSquared

+0

[在由pandas dataframe設置的範圍中計算日期]的可能重複(https://stackoverflow.com/questions/36341081/counting-dates-in-a-range-set-by-pandas-dataframe) –

+0

@piRSquared i編輯問題,我希望額外的解釋幫助,對不起我的英語。 – Roberto

回答

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').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 
相關問題