pandas.DataFrame.asof#
- DataFrame.asof(where, subset=None)[源代码]#
返回 where 之前的最后一行(或多行),且不包含任何 NaN。
最后一行(对于 where 中的每个元素,如果是列表)没有任何 NaN 的行将被采用。如果是
DataFrame
,则只考虑列的子集(如果不是 None)的最后一行没有任何 NaN 的行。如果没有好的值,则返回 NaN 给 Series 或返回一个包含 NaN 值的 Series 给 DataFrame
- 参数:
- 哪里日期或日期的数组类型
返回最后一行之前的日期。
- subset : str 或 str 的类数组, 默认 Nonestr 或 str 的类数组,默认
对于 DataFrame,如果不是 None,则仅使用这些列来检查 NaNs。
- 返回:
- 标量, 序列, 或 数据框
返回可以是:
scalar : 当 self 是一个 Series 且 where 是一个标量
系列:当 self 是一个 Series 且 where 是一个类数组时,或者当 self 是一个 DataFrame 且 where 是一个标量时
DataFrame : 当 self 是一个 DataFrame 且 where 是一个类数组时
参见
merge_asof
执行一个 asof 合并。类似于左连接。
备注
日期假定为已排序。如果不是这种情况,则引发错误。
例子
一个序列和一个标量 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) 2.0
对于一个序列 where,会返回一个 Series。第一个值是 NaN,因为 where 的第一个元素在第一个索引值之前。
>>> s.asof([5, 20]) 5 NaN 20 2.0 dtype: float64
缺失值不被考虑。以下是
2.0
,不是 NaN,即使 NaN 在30
的索引位置。>>> s.asof(30) 2.0
考虑所有列
>>> 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
考虑单个列
>>> 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