我在这方面看到了几个问题,但我找不到任何技巧。
我正在尝试根据第二个数据帧的值填充数据帧的所有NaN值。第一个df是巨大的,第二个df将作为各种关键。
DF1
Part System_Type Replacement_Cost Service_Life(Years) Location
nut A/C .09 1 TX
Bolt Generator NAN NAN MT
screw roof .08 NAN UT
screw A/C NAN 3 OH
screw roof .08 NAN TX
DF2
Part System_Type Replacement_Cost Service_Life(Years)
Bolt Generator .06 2
screw roof .08 3
screw A/C .08 3
使用这样的输出
Part System_Type Replacement_Cost Service_Life(Years) Location
nut A/C .09 1 TX
Bolt Generator .06 2 MT
screw roof .08 3 UT
screw A/C .08 3 OH
screw roof .08 3 TX
我尝试使用df1.combine_first(df2),但我需要它来填充所有NAN,其中'Part'和'System_Type'都作为正确匹配数据的键。似乎没有填充所有缺失的值,只有少数几个。我的数据集是数百万行,所以每当特定的一组值出现时我就需要它来填充NAN(即每次看到螺丝和屋顶时,它应该将重置成本填入'.08'和服务生命为'3')
答案 0 :(得分:2)
假设NAN
为np.nan
df1.fillna(df1[['Part', 'System_Type']].merge(df2, 'left'))
Part System_Type Replacement_Cost Service_Life(Years) Location
0 nut A/C 0.09 1.0 TX
1 Bolt Generator 0.06 2.0 MT
2 screw roof 0.08 3.0 UT
3 screw A/C 0.08 3.0 OH
4 screw roof 0.08 3.0 TX
否则,您可以将NAN
替换为np.nan
df1.replace('NAN', np.nan).fillna(df1[['Part', 'System_Type']].merge(df2, 'left'))
Part System_Type Replacement_Cost Service_Life(Years) Location
0 nut A/C .09 1 TX
1 Bolt Generator 0.06 2 MT
2 screw roof .08 3 UT
3 screw A/C 0.08 3 OH
4 screw roof .08 3 TX