python - 通过从其他 DataFrame 中选择值来在 Pandas DataFrame 中填充 NaN

标签 python pandas dataframe

我正在玩弄泰坦尼克号数据集,并试图填写年龄值。 我的数据框看起来像:

 Dataframe df

    Survived  Pclass   Age  SibSp  Parch      Fare  male  Q  S   Title
0           0       3  22.0      1      0    7.2500     1  0  1      Mr
1           1       1  38.0      1      0   71.2833     0  0  0     Mrs
2           1       3  26.0      0      0    7.9250     0  0  1    Miss
3           1       1  35.0      1      0   53.1000     0  0  1     Mrs
4           0       3  35.0      0      0    8.0500     1  0  1      Mr
5           0       3   NaN      0      0    8.4583     1  1  0      Mr

DataFrame age_df
                    3        1        2
    Mr        28.7249  41.5805  32.7683
    Mrs       33.5152  40.8824  33.6829
    Miss      16.1232       30  22.3906
    Master    5.35083  5.30667  2.25889
    Don            40       40       40
    Rev       43.1667  43.1667  43.1667
    Dr             42    43.75     38.5
    Mme            24       24       24
    Ms             28       28       28
    Major        48.5     48.5     48.5
    Lady           48       48       48
    Sir            49       49       49
    Mlle           24       24       24
    Col            58       58       58
    Capt           70       70       70
    Countess       33       33       33
    Jonkheer       38       38       38

我想根据 df['Title']df[ 用 age_df 中的相应值填充 df['Age'] 缺失值'Pclass']

我想出了这个,但没有一个 NaN 被覆盖。

for tit in df['Title'].unique():
    for cls in [1,2,3]:
        df.loc[ (df['Age'].isna() == True) &
                (df['Title'] == tit) &
                (df['Pclass'] == cls)]['Age'] = age_df.loc[tit][cls]

此外,我认为这不应该用嵌套循环来完成。 我应该怎么做?

最佳答案

一种方法可能是将 applyifelse 条件一起使用,如下所示:

df['Age'] = df.apply(lambda row: age_df.loc[row.Title, row.Pclass] 
                                               if pd.isnull(row.Age) 
                                               else row.Age, axis=1)

关于python - 通过从其他 DataFrame 中选择值来在 Pandas DataFrame 中填充 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50516390/

相关文章:

python - 如何对 Pandas 数据透视表进行排序,但将总数保留在表的末尾

Python != 操作 vs "is not"

python - Tkinter:如何固定窗口打开位置,同时让宽度和高度包裹内容

python-3.x - 从多个特定日期选择 pandas 中的数据

r - R 中使用 NA 进行条件转置

python - Pandas 数据帧滚动意味着有效

python - 对 StringIO、StringIO 和 BytesIO 感到困惑

python - 将 pandas 数据框列中的单词按另一列分组以获得频率/计数

python - 如何将数据框转换为工作表(Python 3.8)?

Python无法运行程序