鉴于约会,我正在使用pandas date_range
来生成额外的30个日期:
import pandas as pd
from datetime import timedelta
pd.date_range(startdate, startdate + timedelta(days=30))
在这30个日期中,我如何从第一个位置的日期开始,到最后一个位置的日期结束,从顺序中随机选择10个日期?
答案 0 :(得分:5)
np.random.choice
从给定的一组选项中选择指定数量的项目。 8
个更多日期。pd.to_datetime
和sort_values
以确保它们保持有序。dates = pd.date_range('2011-04-01', periods=30, freq='D')
random_dates = pd.to_datetime(
np.concatenate([
np.random.choice(dates[1:-1], size=8, replace=False),
dates[[0, -1]]
])
).sort_values()
random_dates
DatetimeIndex(['2011-04-01', '2011-04-02', '2011-04-03', '2011-04-13',
'2011-04-14', '2011-04-21', '2011-04-22', '2011-04-26',
'2011-04-27', '2011-04-30'],
dtype='datetime64[ns]', freq=None)
答案 1 :(得分:2)
如果没有必要明确获取第一个和最后一个值(如果是,则使用其他答案),您可以将numpy.random.choice
与replace=False
一起使用:
a = pd.date_range('2011-04-01', periods=30, freq='D')
print (pd.to_datetime(np.sort(np.random.choice(a, size=10, replace=False))))
DatetimeIndex(['2011-04-01', '2011-04-03', '2011-04-05', '2011-04-09',
'2011-04-12', '2011-04-17', '2011-04-22', '2011-04-24',
'2011-04-29', '2011-04-30'],
dtype='datetime64[ns]', freq=None)