我需要像这样从dataframe
获取每个时间段的随机值:
Name
2019-07-29 08:07:12.299705088 Olaf
2019-07-29 08:07:31.473063936 Elsa
2019-07-29 08:09:41.507259904 Anna
2019-07-29 08:09:41.607259648 Sven
2019-07-29 08:13:02.310900992 Hans
因此每分钟一个元素的输出如下:
Name
2019-07-29 08:07:12.299705088 Olaf
2019-07-29 08:09:41.507259904 Anna
2019-07-29 08:13:02.310900992 Hans
我尝试了pd.to_datetime()
方法,但是没有得到很好的结果。
答案 0 :(得分:3)
使用Series.dt.floor
删除秒,使用GroupBy.head
删除每组的第一个值:
#if necessary convert to DatetimeIndex
df.index = pd.to_datetime(df.index)
df1 = df.groupby(df.index.floor('T')).head(1)
print (df1)
Name
2019-07-29 08:07:12.299705088 Olaf
2019-07-29 08:09:41.507259904 Anna
2019-07-29 08:13:02.310900992 Hans
如果需要随机行,请对DataFrame.sample
使用lambda函数:
df2 = df.groupby(df.index.floor('T'), group_keys=False).apply(lambda x: x.sample(1))
print (df2)
Name
2019-07-29 08:07:12.299705088 Olaf
2019-07-29 08:09:41.507259904 Anna
2019-07-29 08:13:02.310900992 Hans
答案 1 :(得分:0)
我的建议是将日期和时间分为两个不同的列。然后,您可以将时间列转换为日期时间,并获取每一行的分钟值。然后,最具表现力的选项是创建带有从数据帧中最早的值经过的分钟数的列。您可以按分钟将其分组,并根据需要进行操作。