使用Pandas中的逻辑和分组方法填充缺失值

时间:2017-01-13 00:25:21

标签: python pandas grouping missing-data

在Python中有一个像这样的数据框:

x1 x2 x3
a  1  1000
a  1  2390
a  1   ?
b  2  120
b  2  2000

所以我的目标是填写第x3列中的所有缺失值。但是,如果我将使用标准方法(pd.fillna(df.mean())我不会得到理想的结果。我希望能够以某种方式不是x3列的简单mean()而只是x3的所有意味着() x1 = a和x2 = 1的值。如何在Python Pandas中完成?

2 个答案:

答案 0 :(得分:4)

您可以使用groupby.transform()按组填充缺失值:

df['x3'] = df.groupby(["x1", "x2"])['x3'].transform(lambda x: x.fillna(x.mean()))

enter image description here

答案 1 :(得分:2)

使用joinfillna

c = ['x1', 'x2']
df.fillna(df[c].join(df.groupby(c).mean(), on=c))

  x1  x2      x3
0  a   1  1000.0
1  a   1  2390.0
2  a   1  1695.0
3  b   2   120.0
4  b   2  2000.0