通过比较各列中的值来填充NaNs

时间:2018-09-12 17:54:47

标签: python pandas dataframe

我正在处理Kaggle上的“泰坦尼克号”数据集,并希望用数据帧NaNs中的值填充Age列中的df,该数据帧还具有一些常见字段,例如我的原始数据帧Orig

我只希望比较Sex, Pclass,Title列以填充NaN。

df的内容是:

  Sex Pclass Title  Survived       Age      Fare
0   0   1   Miss    0.958333    29.744681   121.694356
1   0   1   Mrs     0.976744    40.400000   92.615505
2   0   1   Officer 1.000000    49.000000   25.929200
3   0   1   Royalty 1.000000    40.500000   63.050000
4   0   2   Miss    0.941176    22.390625   20.393750
5   0   2   Mrs     0.904762    33.547619   23.246231
6   0   3   Miss    0.500000    16.123188   15.248043
7   0   3   Mrs     0.500000    33.515152   18.233529
8   1   1   Master  1.000000    5.306667    117.802767
9   1   1   Mr      0.345794    41.580460   68.034385
10  1   1   Officer 0.444444    51.125000   53.761111
11  1   1   Royalty 0.333333    42.333333   28.216667
12  1   2   Master  1.000000    2.258889    27.306022
13  1   2   Mr      0.087912    32.768293   19.252564
14  1   2   Officer 0.000000    42.000000   16.796875
15  1   3   Master  0.392857    5.350833    28.177232
16  1   3   Mr      0.112853    28.724891   11.299762

Orig是:

enter image description here

如何使用NaNs填充Age的{​​{1}}列中的Orig

1 个答案:

答案 0 :(得分:2)

创建感兴趣的列的列表:
cols = [
    *orig.columns.difference(df.columns),'Sex_x','Pclass_x',
    'Title_x', 'Survived_x', 'Age_x', 'Age_y', 'Fare'
]
在列SexPClassTitle上进行左合并(合并),并用NaN中的值填充Age_y值:
  orig = orig.merge(df, on=['Sex', 'PClass', 'Title'], how='left')[cols]
    orig['Age'] = df['Age_x'].fillna(df['Age_y'])
删除现在多余的Age_xAge_y列:
orig.drop(columns=['Age_x', 'Age_y'], inplace=True)
相关问题