从pandas date_range中随机选择n个日期

时间:2017-02-10 08:10:24

标签: python pandas

鉴于约会,我正在使用pandas date_range来生成额外的30个日期:

import pandas as pd
from datetime import timedelta
pd.date_range(startdate, startdate + timedelta(days=30))

在这30个日期中,我如何从第一个位置的日期开始,到最后一个位置的日期结束,从顺序中随机选择10个日期?

2 个答案:

答案 0 :(得分:5)

  • 使用np.random.choice从给定的一组选项中选择指定数量的项目。
  • 为了保证保留第一个和最后一个日期,我明确地将它们拉出来并随机选择8个更多日期。
  • 然后我将它们传回pd.to_datetimesort_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.choicereplace=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)