我有一个类似的df
floor id p1 p2 p3
L1 1 5 6 7
L1 2 5 8 3
L2 1 4 2 1
L2 2 4 5 4
和df2
floor id p1 p2 p4
L1 1 6 6 5
L1 2 9 8 5
L2 1 5 5 5
L2 2 4 5 5
如何用特定于df2的值替换特定楼层和ID的df中的p1和p2值?
答案 0 :(得分:1)
我们也可以使用DataFrame.merge
df1 = (df1[df1.columns.difference(['p1','p2'])].merge(df2,
on =['floor','id'],
how ='left')
.fillna(df1)[df1.columns])
print(df1)
floor id p1 p2 p3
0 L1 1 6 6 7
1 L1 2 9 8 3
2 L2 1 5 5 1
3 L2 2 4 5 4
答案 1 :(得分:0)
合并可以用于此特定问题:
# left join
df = (df.merge(df2, left_on=['floor', 'id'], how='left', right_on=['floor', 'id'])
# fill missing values with corresponding original df values
df['p1_y'] = df['p1_y'].fillna(df['p1_x']).astype(int)
df['p2_y'] = df['p2_y'].fillna(df['p2_x']).astype(int)
# drop unnecessary columns
df.drop(['p1_x', 'p2_x', 'p4'], axis=1, inplace=True)
df.rename(columns={'p1_y': 'p1', 'p2_y': 'p2'}, inplace=True)