我有一个输入 Dataframe (df1),其中包含Id、子id
df1 = pd.DataFrame({'Id': ['A1', 'A2', 'A3', 'B1', 'B2'],
'Subid':['A', 'A', 'A', 'B', 'B'],
'feature1':[2.6, 6.3, np.nan, np.nan, 3.3],
'feature2':[55, np.nan, np.nan, 44, 69],
'feature3':[np.nan, 0.5, 0.3, np.nan, np.nan],
'feature4':[22, np.nan, 46, np.nan, 33],
'feature5':[np.nan, np.nan, 52, np.nan, 53]
})
我有另一个输入 Dataframe (df2),其中包含子ID和要填充的特征值。
df2 = pd.DataFrame({'Subid': ['A', 'B'],
'feature1': [2.966666666666667, 1.65],
'feature2': [18.333333333333332, 56.5],
'feature3': [0.26666666666666666, 0.0],
'feature4': [22.666666666666668, 16.5],
'feature5': [17.333333333333332, 26.5]})
我需要用df2中每个特性的值填充df1中的nans。我已经尝试了lambda和apply函数,但无法获得结果
df1.loc[df1['feature1'].isna(), 'feature1'] = df2.groupby('Subid')['feature1'].apply(lambda x:x)
预期输出:
outputdf = pd.DataFrame({'Id': ['A1', 'A2', 'A3', 'B1', 'B2'],
'Subid':['A', 'A', 'A', 'B', 'B'],
'feature1': [2.6, 6.3, 2.966667, 1.650000, 3.3],
'feature2': [55, 18.333333, 18.333333, 44, 69],
'feature3': [0.266667, 0.5, 0.3, 0.000000, 0.000000],
'feature4': [22, 22.666667, 46, 16.500000, 33],
'feature5': [17.333333, 17.333333, 52, 26.500000, 53]
})
快速的帮助是感激的。
3条答案
按热度按时间lvmkulzt1#
您可以在
fillna
之前使用merge
:输出量:
rryofs0p2#
您可以使用fillna填充np.nans值,并将第二个 Dataframe 与匹配的Subid合并
gpnt7bae3#
退货: