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

如何在Python数据框(包含日期)中查找单元格中匹配项第一次出现的行索引,python,pandas,date,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.con

我有一个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,以此类推


感谢您的任何意见

我不知道它是否是最佳的,但它确实有效

(df['Date Time'].dt.strftime('%Y-%m-%d') == '2019-01-02').idxmax()

是的,您可以使用.loc和一个条件对df进行切片,然后使用.iloc返回索引

import pandas as pd
df = pd.DataFrame({'time':pd.date_range(start='2018-01-01 00:00:00',end='2018-12-31 00:00:00', freq='H')}, index=None).reset_index(drop=True)

# then use conditions and .iloc to get the first instance
df.loc[df['time']>'2018-10-30 01:00:00'].iloc[[0,]].index[0]

# if you specify a coarser condition, for instance without time,
# it will also return the first instance
df.loc[df['time']>'2018-10-30'].iloc[[0,]].index[0]

您可以使用
next
iter
作为第一个索引值匹配条件,在没有匹配值的情况下防止失败:

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

如果性能很重要,请参见。

您能否不调用
index
函数?:
df[df['Date-Time'].dt.Date==pd.Timestamp('2019-01-02').Date()].head(1).index
更好的是,您可以尝试创建一个数据帧样本,不管它是否有效,都可以尝试使用它来显示数据,你可以根据自己的需求得到合适的答案,文本细节并不能让你很好地理解。