如何在给定的时间范围(第二,分钟)中获得一行(第一行或随机行)

时间:2019-08-02 11:35:18

标签: python pandas dataframe

我需要像这样从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()方法,但是没有得到很好的结果。

2 个答案:

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

我的建议是将日期和时间分为两个不同的列。然后,您可以将时间列转换为日期时间,并获取每一行的分钟值。然后,最具表现力的选项是创建带有从数据帧中最早的值经过的分钟数的列。您可以按分钟将其分组,并根据需要进行操作。