python - 如何根据其他变量估算缺失值

标签 python pandas missing-data

我有一个如下所示的数据框:

df = pd.DataFrame({'one' : pd.Series(['a', 'b', 'c', 'd','aa','bb',np.nan,'b','c',np.nan, np.nan] ), 
  'two' : pd.Series([10, 20, 30, 40,50,60,10,20,30,40,50])} )

dataframe

其中第一列是变量,第二列是值。变量值是常量,永远不会改变。

例如'a'的值为10每当'a'出现时对应的值为10

这里第一列中缺少一些值例如:NaN 10 是 a,NaN 40 是 d 就像明智的数据框包含 200 个变量。

值不是连续变量,它们是离散且不可排序的

在这种情况下,我们如何估算缺失值。 预期输出应该是:

Expected output

请帮我解决这个问题。

问候, 文卡特。

最佳答案

我觉得总体来说还是分组填充比较好。我们使用 DataFrame.groupby :

df.groupby('two').apply(lambda x: x.ffill().bfill())

它可以不使用 groupby 来完成,但你必须按两列排序:

df.sort_values(['two','one']).ffill().sort_index()

Below I show you how the method proposed in another answer may fail:

这是一个例子:

df=pd.DataFrame({'one':['a',np.nan,'c','d',np.nan,'c','b','b',np.nan,'a'],'two':[10,20,30,40,10,30,20,20,30,10]})
print(df)

   one  two
0    a   10
1  NaN   20
2    c   30
3    d   40
4  NaN   10
5    c   30
6    b   20
7    b   20
8  NaN   30
9    a   10

df.sort_values(['two']).fillna(method='ffill').sort_index()


  one  two
0   a   10
1   a   20
2   c   30
3   d   40
4   a   10
5   c   30
6   b   20
7   b   20
8   c   30
9   a   10

如您所见,另一个答案中提出的方法在这里失败了(请参见第 1 行)。发生这种情况是因为某些 NaN 值可能是列“two”的特定值的第一个,并填充了上组的值。

如果我们先分组,就不会发生这种情况:

df.groupby('two').apply(lambda x: x.ffill().bfill())

  one  two
0   a   10
1   b   20
2   c   30
3   d   40
4   a   10
5   c   30
6   b   20
7   b   20
8   c   30
9   a   10

正如我所说,我们可以使用 DataFrame.sort_values但是我们需要对两列进行排序。我推荐你这个方法

df.sort_values(['two','one']).ffill().sort_index()

  one  two
0   a   10
1   b   20
2   c   30
3   d   40
4   a   10
5   c   30
6   b   20
7   b   20
8   c   30
9   a   10

关于python - 如何根据其他变量估算缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58669869/

相关文章:

python - 警告 : multiple data types in column of very large dataframe

python - 以递归方式存储返回值?

python - Pandas mul 密集与稀疏

R data.table 将 NA 替换为数字列的平均值和标称值的最常见值

python - 使用 pip-install 的 Python 包的综合下载统计信息

python - 搜索目录中的字符串

pandas - 基于 Pandas 列值的条件乘法

python - 来自嵌套元组的 Pandas Dataframe

machine-learning - 基于类别的缺失值替换

r - 在R中填充缺失值时间序列数据