当前位置: 代码迷 >> python >> 熊猫设置一列多行的值
  详细解决方案

熊猫设置一列多行的值

热度:103   发布时间:2023-07-16 10:43:48.0

我有一个dataframe( train ),其中有一个Age列。 该列缺少值。 我已经将它与另一个static_values合并了,其中也有一个Age列。 我使用以下几行替换train df中“ Age列的缺失值。

predicted_vals = pd.merge(static_vals, train, on=['Pclass','Sex'])
# num of missing values
predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_y'].isna().sum() # 177
predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_y'] = predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_x']

在运行完上述行之后,我运行以下命令以查看值是否已被替换-

predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_y']

这就是我得到的putput-

Series([], Name: Age_x, dtype: float64)

它是空的。 没有作业发生。 奇怪的是,当我在运行上述行后检查Age_x列的值时,那里也有空白。

>>> predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_x']
Series([], Name: Age_x, dtype: float64)

下面是在我尝试分配缺失值的行之前,该列所保留的内容

>>> predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_x'].head()
3     34.240964
8     34.240964
15    34.240964
25    34.240964
34    34.240964

我在这里搜索了类似的问题,但所有问题都涉及为多个行分配单个值。 我不明白这里出了什么问题。 有什么帮助吗?

这里真的有问题吗? predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_y']应该为空,因为您已经填充了值! 尝试predicted_vals.loc[~predicted_vals['Age_y'].isna(),'Age_y']

这是一种替代解决方案,它避免合并和处理列名后缀。 我们对齐两个索引,并使用fillnastatic_vals进行映射。

predicted_vals = predicted_vals.set_index(['Pclass','Sex'])

predicted_vals['Age'] = predicted_vals['Age'].fillna(static_vals.set_index(['Pclass','Sex'])['Age'])

predicted_vals = predicted_vals.reset_index()

如果您想进行显式合并,则是道。

我认为您需要 :

predicted_vals['Age_y'] = predicted_vals['Age_y'].combine_first(predicted_vals['Age_x'])
  相关解决方案