Проверьте dtypes
в df
: если df.dtypes
из C
столбцов не является datetime, преобразуйте его в datetime:
df.dtypes
Out[46]:
B int64
C object
dtype: object
df['C'] = pd.to_datetime(df['C'])
df.dtypes
Out[48]:
B int64
C datetime64[ns]
dtype: object
Теперь столбцы 'C' сопоставимы со строками в формате datetime:
target_date = "2018-10-28"
df[df['C'] >= target_date].tail(3)
B C
A
3 30 2018-10-30
4 40 2018-10-29
5 50 2018-10-28
Но в более общем случае (существует более одного целевого столбца и данные не упорядочены), вы можете использовать следующий подход:
df
A B C
0 10 2018-09-10
1 20 2018-07-11
2 20 2018-06-12
3 30 2018-07-13
4 50 2018-10-28
5 10 2018-11-01
6 20 2018-10-31
7 30 2018-10-30
8 40 2018-10-29
9 50 2018-10-28
10 60 2018-10-27
index = df[df['C'] == '2018-10-28'].index
index
Out:
Int64Index([4, 9], dtype='int64', name=0)
Используйте slice
и .iloc
для извлечения целей:
slices = [slice(i, i-3, -1) for i in indicies]
slices
Out: [slice(4, 1, -1), slice(9, 6, -1)]
pd.concat([df.iloc[sl] for sl in slices])
B C
A
4 50 2018-10-28
3 30 2018-07-13
2 20 2018-06-12
9 50 2018-10-28
8 40 2018-10-29
7 30 2018-10-30
Результирующий кадр не отсортирован, но его будет легко исправить. Этот подход работает только для числового индекса, но в его отсутствие вы можете просто добавить его с помощью pd.reset_index()
.