Python 从数据帧中随机选择小时

Python 从数据帧中随机选择小时,python,pandas,dataframe,datetime,random,Python,Pandas,Dataframe,Datetime,Random,我很难从数据帧中随机选择行。通常,使用np.random.choice(数据,大小=1000)选择一行不是问题。我假设替换=正确。但是,我需要随机选择一个小时,作为输出,接收每个季度的4行 要从中选择的数据帧如下(1132行): 我想要的输出是这样的: 假设随机发生器已“选择”2018-07-11 05:00:00,则输出为 2018-07-11 05:00:00 43.80 43.49 43.49 2018-07-11 05:15:00 43.80 50.71 50.7

我很难从数据帧中随机选择行。通常,使用
np.random.choice(数据,大小=1000)
选择一行不是问题。我假设替换=正确。但是,我需要随机选择一个小时,作为输出,接收每个季度的4行

要从中选择的数据帧如下(1132行):

我想要的输出是这样的:

假设随机发生器已“选择”
2018-07-11 05:00:00
,则输出为

2018-07-11 05:00:00  43.80    43.49   43.49
2018-07-11 05:15:00  43.80    50.71   50.71
2018-07-11 05:30:00  43.80    48.19   48.19
2018-07-11 05:45:00  43.80    40.02   40.02
根据随机样本的数量(N),生成的数据帧的长度应为4xN

是否可以直接从数据帧中随机选择一个dayhour并重复1000次?我担心使用一个额外的数据框来选择一个小时,然后在原始数据框中查找相应的值会太耗时。 我相信这在Python中是可行的,但我找不到任何关于这方面的提示


谢谢你的帮助

我认为您可以将删除分和秒的值与进行比较:

N = 1000
vals = pd.to_datetime(np.random.choice(df.index,size=N)).floor('H')
hours = df.index.floor('H')

for i in vals:
    print (df[hours == i])
编辑:对于联接所有小数据帧,请使用:

或者使用
np创建数组。连接
DatetimeIndex
,并通过
loc
选择:

idx = np.concatenate([df.index[hours == i] for i in vals])
df1 = df.loc[idx]

我认为您可以将值与删除分钟和秒进行比较:

N = 1000
vals = pd.to_datetime(np.random.choice(df.index,size=N)).floor('H')
hours = df.index.floor('H')

for i in vals:
    print (df[hours == i])
编辑:对于联接所有小数据帧,请使用:

或者使用
np创建数组。连接
DatetimeIndex
,并通过
loc
选择:

idx = np.concatenate([df.index[hours == i] for i in vals])
df1 = df.loc[idx]

采样一次以获取随机索引,然后查找与该日期和时间的所有匹配项:

random_idx = df.sample().index
df[(df.index.date == random_idx.date) & (list(df.index.hour) == random_idx.hour)]
然后做1000次:

for i in range(1000):
    random_idx = df.sample().index
    print(df[(df.index.date == random_idx.date) & (list(df.index.hour) == random_idx.hour)])

采样一次以获取随机索引,然后查找与该日期和时间的所有匹配项:

random_idx = df.sample().index
df[(df.index.date == random_idx.date) & (list(df.index.hour) == random_idx.hour)]
然后做1000次:

for i in range(1000):
    random_idx = df.sample().index
    print(df[(df.index.date == random_idx.date) & (list(df.index.hour) == random_idx.hour)])

是的,我认为这是正确的方向。我注意到,我有点不清楚,因为在N=1000-4000行的情况下,最终的数据帧应该包含。您的建议创建了长度为4的N个数据帧。我必须如何调整代码?是的,我认为这是正确的方向。我注意到,我有点不清楚,因为在N=1000-4000行的情况下,最终的数据帧应该包含。您的建议创建了长度为4的N个数据帧。我将如何调整代码?