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

2024-04-28 19:46:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从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()方法,但始终没有得到好的结果


Tags: to方法name元素dataframedatetimeelsapd
2条回答

使用^{}表示删除秒,^{}表示每个组的第一个值:

#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

如果需要随机行,请使用带有^{}的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

我的建议是把日期和时间分为两列。然后可以将time列转换为datetime,并获取每行的分钟值。最具表现力的选项是创建一个列,其中包含从数据帧中最早的值传递的分钟数。你可以按分钟分组,做你需要的任何事情

相关问题 更多 >