pandas.DataFrame.asof#

DataFrame.asof(where, subset=None)[source] #

Return the last row(s) without any NaNs before where.

The last row (for each element in where, if list) without any NaN is taken. In case of a DataFrame, the last row without NaN considering only the subset of columns (if not None)

If there is no good value, NaN is returned for a Series or a Series of NaN values for a DataFrame

Parameters:
wheredate or array-like of dates

Date(s) before which the last row(s) are returned.

subsetstr or array-like of str, default None

For DataFrame, if not None, only use these columns to check for NaNs.

Returns:
scalar, Series, or DataFrame

The return can be:

  • scalar : when self is a Series and where is a scalar

  • Series: when self is a Series and where is an array-like, or when self is a DataFrame and where is a scalar

  • DataFrame : when self is a DataFrame and where is an array-like

See also

merge_asof

Perform an asof merge. Similar to left join.

Notes

Dates are assumed to be sorted. Raises if this is not the case.

Examples

A Series and a scalar where.

>>> s = pd.Series([1, 2, np.nan, 4], index=[10, 20, 30, 40])
>>> s
10 1.0
20 2.0
30 NaN
40 4.0
dtype: float64
>>> s.asof(20)
np.float64(2.0)

For a sequence where, a Series is returned. The first value is NaN, because the first element of where is before the first index value.

>>> s.asof([5, 20])
5 NaN
20 2.0
dtype: float64

Missing values are not considered. The following is 2.0, not NaN, even though NaN is at the index location for 30.

>>> s.asof(30)
np.float64(2.0)

Take all columns into consideration

>>> df = pd.DataFrame(
...  {
...  "a": [10.0, 20.0, 30.0, 40.0, 50.0],
...  "b": [None, None, None, None, 500],
...  },
...  index=pd.DatetimeIndex(
...  [
...  "2018年02月27日 09:01:00",
...  "2018年02月27日 09:02:00",
...  "2018年02月27日 09:03:00",
...  "2018年02月27日 09:04:00",
...  "2018年02月27日 09:05:00",
...  ]
...  ),
... )
>>> df.asof(pd.DatetimeIndex(["2018年02月27日 09:03:30", "2018年02月27日 09:04:30"]))
 a b
2018年02月27日 09:03:30 NaN NaN
2018年02月27日 09:04:30 NaN NaN

Take a single column into consideration

>>> df.asof(
...  pd.DatetimeIndex(["2018年02月27日 09:03:30", "2018年02月27日 09:04:30"]),
...  subset=["a"],
... )
 a b
2018年02月27日 09:03:30 30.0 NaN
2018年02月27日 09:04:30 40.0 NaN
On this page

This Page