将“行值”替换为“与列名匹配的行值”

时间:2019-11-28 15:48:37

标签: python pandas dataframe

“我的数据”框在孔下方

fdf = pd.DataFrame([{'name': 'john', 'john': np.nan, 'mac': np.nan,'val':22}, {'name': 'mac', 'john': np.nan, 'mac': np.nan,'val':55}], columns=["name", "john", "mac",'val'])


fdf
Out[466]: 
   name  john  mac  val
0  john   NaN  NaN   22
1   mac   NaN  NaN   55

我想用对应于列名称的匹配行值替换NaN值

输出

fdf
Out[466]: 
   name  john  mac  val
0  john   22   NaN   22
1   mac   NaN  55    55

Here 1st row of name column value is john and corresponding val column value is 22 , so replace the value in matching column name john.

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:3)

您可以在df.combine_first()之后使用df.update() / unstack()

s=fdf.set_index('name',append=True)['val'].unstack()
fdf = fdf.combine_first(s).reindex(columns=fdf.columns) #preferred for updating NaN
#or update:-> fdf.update(s)

   name  john   mac  val
0  john  22.0   NaN   22
1   mac   NaN  55.0   55
相关问题