2 回答

TA贡献1786条经验 获得超11个赞
你可以试试条件填充
df = pd.DataFrame([
["Sam" , 17 , "E"],
["Chris" , 0 , "B"],
["Tom" , 19 , "P"],
["Sam" , 22 , np.nan],
["Chris" , 18 , np.nan],
["Tom" , 7 , np.nan],
] ,columns=['Name', "Age", "Ethnicity"])
然后
df.loc[df.Ethnicity.isnull(), 'Ethnicity'] = \
df.loc[df.Ethnicity.isnull(), 'Name'].map(df.loc[df.Ethnicity.notnull()] \
.set_index('Name')['Ethnicity'])
输出:
Name Age Ethnicity
0 Sam 17 E
1 Chris 0 B
2 Tom 19 P
3 Sam 22 E
4 Chris 18 B
5 Tom 7 P
但是,如果您确定 NaN 值的名称始终具有相应的名称,那么您可以使用 group by
df["Ethnicity"] = df.groupby('Name').ffill()["Ethnicity"]

TA贡献1155条经验 获得超0个赞
如果需要,请尝试排序和 ffill()。最后 sort_index()。如下所示。我使用了随机 df
df = pd.DataFrame({'A':['a', 'c', 'f', 'a','c','f'],
'B' :[3, 4, 2,10,3, 1],
'C':[np.nan, np.nan, np.nan, 12,13,14]
})
print(df.sort_values(by=['A','C']).ffill().sort_index())
添加回答
举报