Как найти индекс строки первого вхождения совпадения в ячейку в кадре данных Python (с датой)

Это относится к MS-DOS. Чтение или запись в файл с именем «CON:» чтение / запись с консоли. Я полагаю, что Windows все еще поддерживает это для обратной совместимости.

1
задан Ramana 18 January 2019 в 14:20
поделиться

3 ответа

Вы можете использовать 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

Если важна производительность, см. Эффективно вернуть индекс первое значение, удовлетворяющее условию в массиве .

0
ответ дан jezrael 18 January 2019 в 14:20
поделиться

Я не знаю, является ли это оптимальным, но это работает

(df['Date Time'].dt.strftime('%Y-%m-%d') == '2019-01-02').idxmax()
0
ответ дан cors 18 January 2019 в 14:20
поделиться

Да, вы можете использовать .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]
0
ответ дан BenP 18 January 2019 в 14:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: