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()

参数
标量、字典、系列或数据帧

用于填充漏洞的值(例如 0),或者是值的字典/系列/数据帧,指定每个索引(对于系列)或列(对于数据帧)使用哪个值。不在 dict/Series/DataFrame 中的值将不会被填充。该值不能是列表。想要使用该value参数而不是该参数的用户method 应该更喜欢,DataFrame.fillna()因为这会产生相同的结果并且性能更高。

方法{{'bfill', 'ffill', None}}, 默认 None

用于填充孔的方法。'ffill'将在组内向前传播最后一个有效观察。 'bfill'将使用下一个有效观察来填补空白。

{0 或“索引”、1 或“列”}

填充缺失值的轴。当DataFrameGroupBy axis参数为时0,使用axis=1此处将产生与 相同的结果DataFrame.fillna()。当 DataFrameGroupBy axis参数为时1,使用axis=0axis=1会产生相同的结果。

inplace布尔值,默认 False

破碎的。不要设置为 True。

limit int,默认无

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

downcast dict,默认为 None

如果可能的话,要向下转换的 item->dtype 的字典,或者字符串“infer”,它将尝试向下转换为适当的相等类型(例如,如果可能,将 float64 转换为 int64)。

返回
数据框

已填充缺失值的对象。

也可以看看

ffill

转发组内的填充值。

bfill

向后填充组内的值。

例子

>>> 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