2017-02-10 83 views
2

给定一个日期,我使用熊猫date_range产生额外30个日期:随机选择熊猫ň日期DATE_RANGE

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

在这些30个日期的,我怎么能随意为了从开始选择10个日期日期在第一个位置,结束日期在上一个位置?

回答

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) 
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)