繁体   English   中英

在 dataframe 中循环时比较时间(小时和分钟)

[英]Compare time (hours and minutes) when looping in dataframe

我有以下示例数据:

custom_date_parser = lambda x:datetime.strptime(x, "%m/%d/%Y %H:%M") 
df = pd.read_csv('sample.csv', index_col = 0, parse_dates = ['date'], date_parser = custom_date_parser)

|         date          | value   |
| -------------------   | --------|
| 2021-12-06 08:30:00   | 100     |
| 2021-12-06 08:35:00   | 150     |
| 2021-12-06 08:40:00   | 120     |
| 2021-12-06 08:45:00   | 90      |
| 2021-12-06 08:50:00   | 80      |
...................................
| 2021-12-09 08:30:00   | 220     |
| 2021-12-09 08:35:00   | 250     |
| 2021-12-09 08:40:00   | 260     |
| 2021-12-09 08:45:00   | 290     |
| 2021-12-09 08:50:00   | 300     |

如果小时和分钟“08:40:00”在索引列中,我想遍历 dataframe 并在“值”列中打印数字。 我试过有趣的东西,比如:

for i in df.index:
    if '08:40:00' in [i]:
        print(df.value[i])

由于您已将其解析为日期时间 object,因此您可以检查小时和分钟,将 dataframe 过滤到匹配的行并打印相应的值。

for x in df.loc[(df['date'].dt.hour.eq(8)) & (df['date'].dt.minute.eq(40))]['value']:
    print(x)

从您的数据集中,由于date列采用日期时间格式,我们可以简单地过滤所需的时间,如下所示:

>>> df[df['date'].dt.strftime("%H:%M:%S") == '08:40:00']
    date                    value
2   2021-12-06 08:40:00     120
7   2021-12-09 08:40:00     260

我会将您的日期字段设置为 DateTimeIndex。

然后,您可以使用类似的东西来过滤分钟和小时。

df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')
df[df.index.minute == 40] & df[df.index.hour == 8]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM