Python Dataframe - 用 Dataframe 中的现有值替换 NaN 值

时间:2021-06-05 12:46:27

标签: python pandas dataframe

我正在尝试将两个数据帧连接在一起,这预期会导致为 X 和 Y 列创建 NaN 值。

d1 = {'Name':['X1','X2','X3','X4','X5'],
     'Value':[1,2,3,4,5],
     'X':[10,10,20,20,30],
     'Y':[10,20,10,20,10]} 

df1 = pd.DataFrame(d1)

d2 = {'Name':['X1','X2','X2','X3'],    
     'Value':[8,6,5,12]}

df2 = pd.DataFrame(d2)

df1.append(df2).reset_index(drop=True)

我想用 df1 中已经填充的相应值更新 cols X 和 Y 中的 NaN 值。

例如,包含 df1['Name'] == 'X1' 的行的任何实例都将具有与与 df1['X'] 关联的值相同的 df1['Y']df1['Name'] == 'X1' 值。

在本例中,值为:Name = X1, X = 10, Y = 10。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

试试groupby ffill

new_df = df1.append(df2).reset_index(drop=True)
new_df[['X', 'Y']] = new_df.groupby('Name')[['X', 'Y']].ffill()

new_df

  Name  Value     X     Y
0   X1      1  10.0  10.0
1   X2      2  10.0  20.0
2   X3      3  20.0  10.0
3   X4      4  20.0  20.0
4   X5      5  30.0  10.0
5   X1      8  10.0  10.0
6   X2      6  10.0  20.0
7   X2      5  10.0  20.0
8   X3     12  20.0  10.0

答案 1 :(得分:1)

out = df1.append(df2,ignore_index=True)

通过 fillna()groupby() 的另一种方式:

out.fillna(out.groupby('Name')[['X','Y']].transform('first'),inplace=True)

out[['X', 'Y']] = out.groupby('Name')[['X', 'Y']].fillna(method='ffill')

out 的输出:

  Name  Value     X     Y
0   X1      1  10.0  10.0
1   X2      2  10.0  20.0
2   X3      3  20.0  10.0
3   X4      4  20.0  20.0
4   X5      5  30.0  10.0
5   X1      8  10.0  10.0
6   X2      6  10.0  20.0
7   X2      5  10.0  20.0
8   X3     12  20.0  10.0