pandas.core.groupby.DataFrameGroupBy.fillna#

DataFrameGroupBy.fillna(value=None, method=None, axis=_NoDefault.no_default, inplace=False, limit=None, downcast=_NoDefault.no_default)[源代码]#

使用指定方法在组内填充 NA/NaN 值。

自 2.2.0 版本弃用: 此方法已弃用,将在未来版本中删除。请使用 DataFrameGroupBy.ffill()DataFrameGroupBy.bfill() 进行前向或后向填充。如果要用单个值填充,请使用 DataFrame.fillna()

Parameters:
value标量、字典、Series 或 DataFrame

用于填充空缺的值(例如 0),或者是一个字典/Series/DataFrame,其中包含为每个索引(对于 Series)或列(对于 DataFrame)指定要使用的值。字典/Series/DataFrame 中不存在的值将不会被填充。此值不能是列表。希望使用 value 参数而不是 method 的用户应优先使用 DataFrame.fillna() ,因为这将产生相同的结果并且性能更好。

<strong>method</strong>{{‘bfill’, ‘ffill’, None}}, 默认为 None

用于填充空缺的方法。'ffill' 将在组内将最后一个有效观测值向前传播。'bfill' 将使用下一个有效观测值来填充间隙。

axis{0 或 ‘index’, 1 或 ‘columns’}

沿哪个轴进行填充缺失值。当 DataFrameGroupByaxis 参数为 0 时,在这里使用 axis=1 将产生与 DataFrame.fillna() 相同的结果。当 DataFrameGroupByaxis 参数为 1 时,在这里使用 axis=0axis=1 将产生相同的结果。

inplacebool,默认 False

损坏。请勿设置为 True。

<strong>limit</strong>int,默认 None

如果指定了 method,这是在组内向前/向后填充连续 NaN 值的最大数量。换句话说,如果间隙包含多于此数量的连续 NaN,则只会部分填充。如果未指定 method,这是沿整个轴填充 NaN 的连续条目的最大数量。如果为 None,则必须大于 0。

downcastdict,默认为 None

一个 {项目->dtype} 的字典,用于在可能的情况下向下转换,或者字符串 ‘infer’,它将尝试向下转换为合适的等效类型(例如,如果可能,float64 转换为 int64)。

Returns:
DataFrame

填充了缺失值。

参见

ffill

在前向填充组内值。

bfill

在后向填充组内值。

Examples

>>> df = pd.DataFrame(
...     {
...         "key": [0, 0, 1, 1, 1],
...         "A": [np.nan, 2, np.nan, 3, np.nan],
...         "B": [2, 3, np.nan, np.nan, np.nan],
...         "C": [np.nan, np.nan, 2, np.nan, np.nan],
...     }
... )
>>> df
   key    A    B   C
0    0  NaN  2.0 NaN
1    0  2.0  3.0 NaN
2    1  NaN  NaN 2.0
3    1  3.0  NaN NaN
4    1  NaN  NaN NaN

在列上沿每个组向前或向后传播非空值。

>>> df.groupby("key").fillna(method="ffill")
     A    B   C
0  NaN  2.0 NaN
1  2.0  3.0 NaN
2  NaN  NaN 2.0
3  3.0  NaN 2.0
4  3.0  NaN 2.0
>>> df.groupby("key").fillna(method="bfill")
     A    B   C
0  2.0  2.0 NaN
1  2.0  3.0 NaN
2  3.0  NaN 2.0
3  3.0  NaN NaN
4  NaN  NaN NaN

在行上沿每个组向前或向后传播非空值。

>>> df.T.groupby(np.array([0, 0, 1, 1])).fillna(method="ffill").T
   key    A    B    C
0  0.0  0.0  2.0  2.0
1  0.0  2.0  3.0  3.0
2  1.0  1.0  NaN  2.0
3  1.0  3.0  NaN  NaN
4  1.0  1.0  NaN  NaN
>>> df.T.groupby(np.array([0, 0, 1, 1])).fillna(method="bfill").T
   key    A    B    C
0  0.0  NaN  2.0  NaN
1  0.0  2.0  3.0  NaN
2  1.0  NaN  2.0  2.0
3  1.0  3.0  NaN  NaN
4  1.0  NaN  NaN  NaN

仅替换组内沿行的第一个 NaN 元素。

>>> df.groupby("key").fillna(method="ffill", limit=1)
     A    B    C
0  NaN  2.0  NaN
1  2.0  3.0  NaN
2  NaN  NaN  2.0
3  3.0  NaN  2.0
4  3.0  NaN  NaN