我正在尝试将两个数据帧连接在一起,这预期会导致为 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。
非常感谢您的帮助。
答案 0 :(得分:2)
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