Pandas用第一行填充非空数据

3

假设一个数据集将具有以下值:

import pandas as pd
df = pd.DataFrame({'DATA1': ['OK', np.nan,'1', np.nan], 
                   'DATA2' : ['KO','2', np.nan, np.nan]})
df

数据将如下显示:

enter image description here

我的目标是替换所有具有值(非空)的行为以下示例中的第一行值:

enter image description here

我知道可以直接更改数据,但如果有成千上万的列和行,我想找到更好的解决方案。

谢谢 最好的问候 Railey Shahril

2个回答

2

使用DataFrame.maskDataFrame.iloc选择第一行:

df = df.mask(df.notna(), df.iloc[0], axis=1)
print (df)
  DATA1 DATA2
0    OK    KO
1   NaN    KO
2    OK   NaN
3   NaN   NaN

将第一个非缺失值替换为其他值,请使用 backfill参数:

df = pd.DataFrame({'DATA1': [ np.nan, 'OK','1', np.nan], 
                   'DATA2' : ['KO','2', np.nan, np.nan]})

print (df)
  DATA1 DATA2
0   NaN    KO
1    OK     2
2     1   NaN
3   NaN   NaN

df = df.mask(df.notna(), df.bfill(axis=1).iloc[0], axis=1)
print (df)
  DATA1 DATA2
0   NaN    KO
1    KO    KO
2    KO   NaN
3   NaN   NaN

2

您还可以使用np.where()函数:

final=pd.DataFrame(np.where(df.notnull(),df.iloc[0],df),df.index,df.columns)

  DATA1 DATA2
0    OK    KO
1   NaN    KO
2    OK   NaN
3   NaN   NaN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接