2017-09-20 3 views
3

の数と毎月の日付範囲が、私はそうのような開始日と終了日があるとします。パンダ:日

start_d = datetime.date(2017, 7, 20) 
end_d = datetime.date(2017, 9, 10) 

私はこのようになりますそのパンダのデータフレームを取得したい:

Month NumDays 
2017-07 12 
2017-08 31 
2017-09 10 

それ私の範囲に含まれる各月の日数を示します。

これまでのところ、pd.date_range(start_d, end_d, freq='MS')で月次シリーズを生成できます。

答えて

4

その後、sizeSeriesresampleを作成し、最初のデフォルトday周波数でdate_rangeを使用することができます。最終to_periodによってmonth期間に変換:

start_d = pd.datetime(2017, 7, 20) 
end_d = pd.datetime(2017, 9, 10) 

s = pd.Series(index=pd.date_range(start_d, end_d)) 

df = s.resample('MS').size().rename_axis('Month').reset_index(name='NumDays') 
df['Month'] = df['Month'].dt.to_period('m') 
print (df) 
    Month NumDays 
0 2017-07  12 
1 2017-08  31 
2 2017-09  10 

ソリューションを簡素化するためにあなたZeroありがとう:

df = s.resample('MS').size().to_period('m').rename_axis('Month').reset_index(name='NumDays') 
+2

これは恐ろしい – Dark

+0

本当に素敵です! 'df ['TotalDays'] = df ['Month']。apply(lambda m:calendar.monthrange(m.year、m.month))次のようにして、その月の合計日数を取得します。 reset_index(name = 'NumDays') 'で十分でしょう。( '1')' – gberger

+1

'df = s.resample( 'MS')。 。 – Zero