合并两个pandas数据框并保留可用的值
问题的原因:需要将两个pandas数据帧进行合并,并保留可用的值。
解决方法:使用pd.merge()函数进行合并,并使用where()函数进行条件赋值,最后使用drop()方法删除不需要的列。
代码如下:
import pandas as pd df_a = pd.DataFrame({'subject_id': ['1', '2', '3', '4', '5'], 'first_name': ['Alex', 'Amy', 'Allen', 'Alice', None]} , columns = ['subject_id', 'first_name']) df_b = pd.DataFrame({'subject_id': ['4', '5', '6', '7', '8'], 'first_name': [None, 'Brian', 'Bran', 'Bryce', 'Betty']}, columns = ['subject_id', 'first_name']) df_merge = pd.merge(df_a, df_b, on='subject_id', how='outer') df_merge['first_name'] = df_merge['first_name_x'].where(df_merge['first_name_x'].notnull(), df_merge['first_name_y']) df_res = df_merge.drop(['first_name_x', 'first_name_y'], axis=1) print(df_res)
输出结果为:
subject_id first_name 0 1 Alex 1 2 Amy 2 3 Allen 3 4 Alice 4 5 Brian 5 6 Bran 6 7 Bryce 7 8 Betty
如果不知道合并后生成的列名,可以使用以下代码:
suffixes = ('__x', '__y') df_merge = pd.merge(df_a, df_b, on='subject_id', how='outer', suffixes=suffixes) drop_cols = [] for col in df_merge.columns: if col.endswith(suffixes[0]): new_col = col[:-len(suffixes[0])] df_merge[new_col] = df_merge[col].where(df_merge[col].notnull(), df_merge[new_col + suffixes[1]]) drop_cols.extend([col, new_col + suffixes[1]]) df_merge.drop(columns=drop_cols, inplace=True)
注意:更详细的解释可以参考官方文档,文档链接在代码中提供。