Say I have a DataFrame df
with date as index and some values. How can I select the rows where the date is larger than some value x
?
I know I can convert the index to a column and then do the select df[df['date']>x]
, but is that slower than doing the operation on the index?
If you'd like to select rows based on integer indexing, you can use the . iloc function. If you'd like to select rows based on label indexing, you can use the . loc function.
By using the pandas series.gt() method we can check if the elements of a series object are Greater Than a scalar value or not. The gt() comparison operation is exactly equivalent to series > Other.
iloc[[ id ]] (with a single-element list) takes 489 ms, almost half a second, 1,800x times slower than the identical .
Pandas DataFrame: ge() functionThe ge() function returns greater than or equal to of dataframe and other, element-wise. Equivalent to ==, =!, <=, <, >=, > with support to choose axis (rows or columns) and level for comparison. Any single or multiple element data structure, or list-like object.
Example of selecting from a DataFrame with the use of index:
from numpy.random import randn from pandas import DataFrame from datetime import timedelta as td import dateutil.parser d = dateutil.parser.parse("2014-01-01") df = DataFrame(randn(6,2), columns=list('AB'), index=[d + td(days=x) for x in range(1,7)]) In [1]: df Out[1]: A B 2014-01-02 -1.172285 1.706200 2014-01-03 0.039511 -0.320798 2014-01-04 -0.192179 -0.539397 2014-01-05 -0.475917 -0.280055 2014-01-06 0.163376 1.124602 2014-01-07 -2.477812 0.656750 In [2]: df[df.index > dateutil.parser.parse("2014-01-04")] Out[2]: A B 2014-01-05 -0.475917 -0.280055 2014-01-06 0.163376 1.124602 2014-01-07 -2.477812 0.656750
The existing answer is correct, however if we are selecting based on the index, the second method from here would be faster:
# Set index df = df.set_index(df['date']) # Select observations between two datetimes df.loc[pd.TimeStamp('2002-1-1 01:00:00'):pd.TimeStamp('2002-1-1 04:00:00')]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With