Pandas:带天数的月度日期范围
Pandas: monthly date range with number of days
假设我有一个像这样的开始和结束日期:
start_d = datetime.date(2017, 7, 20)
end_d = datetime.date(2017, 9, 10)
我希望获得如下所示的 Pandas DataFrame:
Month NumDays
2017-07 12
2017-08 31
2017-09 10
它显示了我的范围内每个月的天数。
到目前为止,我可以使用 pd.date_range(start_d, end_d, freq='MS')
生成每月系列。
您可以使用 date_range
by default day
frequency first, then create Series
and resample
with size
. Last convert to month
period by to_period
:
import datetime as dt
start_d = dt.date(2017, 7, 20)
end_d = dt.date(2017, 9, 10)
s = pd.Series(index=pd.date_range(start_d, end_d), dtype='float64')
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
感谢 简化解决方案:
df = s.resample('MS').size().to_period('m').rename_axis('Month').reset_index(name='NumDays')
假设我有一个像这样的开始和结束日期:
start_d = datetime.date(2017, 7, 20)
end_d = datetime.date(2017, 9, 10)
我希望获得如下所示的 Pandas DataFrame:
Month NumDays
2017-07 12
2017-08 31
2017-09 10
它显示了我的范围内每个月的天数。
到目前为止,我可以使用 pd.date_range(start_d, end_d, freq='MS')
生成每月系列。
您可以使用 date_range
by default day
frequency first, then create Series
and resample
with size
. Last convert to month
period by to_period
:
import datetime as dt
start_d = dt.date(2017, 7, 20)
end_d = dt.date(2017, 9, 10)
s = pd.Series(index=pd.date_range(start_d, end_d), dtype='float64')
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
感谢
df = s.resample('MS').size().to_period('m').rename_axis('Month').reset_index(name='NumDays')