【发布时间】:2021-07-06 16:00:12
【问题描述】:
我正在尝试使用 Python 中的 pandas 模块使用组中最常见的值来估算缺失值。在查看 Stack Overflow 上的一些帖子后,我设法做到了:
import numpy as np
import pandas as pd
df = pd.DataFrame({"group": ["A", "A", "A", "A", "B", "B", "B"],
"value": [1, 1, 1, np.nan, 2, np.nan, np.nan]})
df.groupby("group").transform(lambda x: x.fillna(x.mode().iloc[0]))
运行此代码将用 1 填充组“A”的缺失条目,并用 2 填充组“B”的两个缺失条目。但是,我们假设其中一个组仅包含缺失数据(在本例中为组“B”):
df1 = pd.DataFrame({"group": ["A", "A", "A", "A", "B", "B", "B"],
"value": [1, 1, 1, np.nan, np.nan, np.nan, np.nan]})
df1.groupby("group").transform(lambda x: x.fillna(x.mode().iloc[0]))
运行上面的代码将提示IndexError: single positional indexer is out-of-bounds。我希望正常的行为是保留 np.nan 因为如果你运行方法 mode 只是,比如说,来自 df1 的组“B”:
df1[df1.group == "B"].mode()
我会知道 NaN 是最常见的值。我怎样才能避免这个问题?
【问题讨论】:
标签: python-3.x pandas pandas-groupby nan imputation