python - 如何查找Python数据框中单元格中第一次出现匹配的行索引(包含日期)

标签 python pandas date

我有一个Python数据框,其中包含一个带有日期时间的列,如下所示 2019-01-02 09:00:00(即2019年1月2日上午9点)

“日期时间”列中可能有一堆具有相同日期的行。

换句话说,我可以有 2019-01-02 09:00:00 或 2019-01-02 09:15:00 或 2019-01-02 09:30:00 等等。

现在我需要在 Python 数据框中查找日期 2019-01-02 第一次出现的行索引

我显然使用循环来做到这一点,但我想知道是否有更好的方法。

df['Date Time'].str.contains()方法,我可以获得与给定日期匹配的所有行,但我需要索引

一般问题是我们如何找到与给定字符串模式匹配的 Python 数据帧中单元格中第一次出现的匹配项的索引。

更具体的问题是,我们如何找到 Python 数据框中单元格中第一次出现的匹配项的索引,该匹配项与包含日期时间的单元格中的给定日期相匹配假设Python 数据框按日期时间的时间升序排序,即 2019-01-02 09:00:00 出现在早于 2019-01-02 09:15:00 的索引处,然后是 2019-01-03 09:00:00 等等。

感谢您的贡献

最佳答案

您可以将 nextiter 结合使用作为第一个索引值匹配条件,以防止在没有匹配值时失败:

df = pd.DataFrame({'dates':pd.date_range(start='2018-01-01 20:00:00',
                                         end='2018-01-02 02:00:00', freq='H')})
print (df)
                dates
0 2018-01-01 20:00:00
1 2018-01-01 21:00:00
2 2018-01-01 22:00:00
3 2018-01-01 23:00:00
4 2018-01-02 00:00:00
5 2018-01-02 01:00:00
6 2018-01-02 02:00:00

date = '2018-01-02'
mask = df['dates'] >= date
idx = next(iter(mask.index[mask]), 'not exist')
print (idx)
4


date = '2018-01-08'
mask = df['dates'] >= date
idx = next(iter(mask.index[mask]), 'not exist')
print (idx)
not exist

如果性能很重要,请参阅 Efficiently return the index of the first value satisfying condition in array .

关于python - 如何查找Python数据框中单元格中第一次出现匹配的行索引(包含日期),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54255890/

相关文章:

mysql - 计算某一日期存在的记录数

python - CPython 的垃圾收集是否进行压缩?

python - 你如何将一个列表(无限长)随机分成 3 个子组?

sql - 选择带有日期条件的查询

python - 如何将具有多个标题行的 csv 文件读入 pandas?

python - 拟合方法的输入数组

ruby - 使 Date#parse 采用美国格式而不是欧盟格式

python - Flask - 返回 jsonify 与 dict 时有什么区别?

python - 如何从redis中排队rq中的工作

python - python中&\是什么意思