如何根据第一个值填充nan?

时间:2021-04-22 15:26:39

标签: python pandas numpy

假设您有以下 df:

d = {'description#1': ['happy', 'coding', np.nan], 'description#2': [np.nan, np.nan, np.nan], 'description#3': [np.nan, np.nan, np.nan]}
dffinalselection= pd.DataFrame(data=d)
dffinalselection


description#1   description#2   description#3
0   happy            NaN          NaN
1   coding            NaN         NaN
2   NaN               NaN         NaN

如果为 NaN,我想用第一个 description#1 列值填充 df:

filldesc = dffinalselection.filter(like='description')
filldesc = filldesc.fillna(dffinalselection['description#1'], axis=1)
filldesc

但是,得到以下错误:

NotImplementedError: Currently only can fill with dict/Series column by column

如何解决?

期望输出:

description#1   description#2   description#3
0   happy            happy        happy
1   coding            coding      coding
2   NaN               NaN         NaN

请帮忙!

2 个答案:

答案 0 :(得分:2)

您可以在带有 apply() 的行上使用 axis=1,然后使用 Series.fillna() 填充 nan 值。

import pandas as pd
import numpy as np

d = {'description#1': ['happy', 'coding', np.nan], 'description#2': [np.nan, 'tokeep', np.nan], 'description#3': [np.nan, np.nan, np.nan]}

dffinalselection = pd.DataFrame(data=d)

df_ = dffinalselection.apply(lambda row: row.fillna(row[0]), axis=1)
print(df_)

  description#1 description#2 description#3
0         happy         happy         happy
1        coding        tokeep        coding
2           NaN           NaN           NaN

答案 1 :(得分:1)

axis=1 中使用 ffill 方法:

dffinalselection.ffill(axis=1)