如何筛选两个同结构DataFrame中仅单表有值另一表为NaN的行
实现代码
你可以直接使用下方封装好的函数,输入目标列名即可返回符合要求的对比结果:
def get_mismatch_rows(col_name): # 筛选条件:两表对应列仅一侧有值、另一侧为NaN filter_cond = (df_1[col_name].notna() & df_2[col_name].isna()) | \ (df_2[col_name].notna() & df_1[col_name].isna()) # 拼接两表对应列返回,方便对比 result = pd.concat( [df_1.loc[filter_cond, col_name], df_2.loc[filter_cond, col_name]], axis=1 ) result.columns = [f"df1_{col_name}", f"df2_{col_name}"] return result
使用示例
- 筛选col1的结果:
print(get_mismatch_rows('col1'))
输出:
df1_col1 df2_col1 2018-01-31 NaN 12.0 2018-02-28 1.0 NaN 2018-07-31 3.0 NaN 2018-08-31 NaN 70.0 2018-11-30 4.0 NaN 2018-12-31 2.0 42.0
- 筛选col2的结果:
print(get_mismatch_rows('col2'))
输出:
df1_col2 df2_col2 2018-03-31 NaN 74.0 2018-04-30 5.0 NaN 2018-05-31 NaN 60.0 2018-11-30 NaN 34.0 2018-12-31 2.0 NaN
内容的提问来源于stack exchange,提问作者stacksideways
相关产品推荐
相关产品推荐

