きれいな方法を思いつかなかったので、とりあえずの実現方法です。
columnsは0,1,2としてやっています。
python
1print(old_df)
2print(new_df)
3temp_df = pd.merge(old_df, new_df, on=(0,1), how='outer')
4temp_df[2] = temp_df.apply(lambda row:int(row['2_x']) if pd.isna(row['2_y']) else int(row['2_y']), axis=1)
5merge_df = temp_df.drop(columns = ['2_x', '2_y']).sort_values([0,1])
6print(merge_df)
実行結果
python
1>>> print(old_df)
2 0 1 2
30 A 1 100
41 A 2 120
52 A 3 140
63 B 1 150
74 B 2 80
85 B 3 60
9>>> print(new_df)
10 0 1 2
110 A 2 130
121 A 3 140
132 A 4 140
143 B 2 100
154 B 3 65
165 B 4 10
17>>> temp_df = pd.merge(old_df, new_df, on=(0,1), how='outer')
18>>> temp_df[2] = temp_df.apply(lambda row:int(row['2_x']) if pd.isna(row['2_y']) else int(row['2_y']), axis=1)
19>>> merge_df = temp_df.drop(columns = ['2_x', '2_y']).sort_values([0,1])
20>>> print(merge_df)
21 0 1 2
220 A 1 100
231 A 2 130
242 A 3 140
256 A 4 140
263 B 1 150
274 B 2 100
285 B 3 65
297 B 4 10
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。