Python如何拼接两个DataFrame:仅保留常量列值,差异列设为nan
实现DataFrame按规则拼接的方法
你可以按以下逻辑实现需求,核心是先识别恒定列,再扩展df2后拼接:
完整代码实现
import pandas as pd import numpy as np # 构造示例数据 df1 = pd.DataFrame({ 'A': ['ar']*5, 'B': [2,3,0,4,5], 'C': [3]*5, 'id': [1,1,2,2,2], 'val': [3.2,5.6,7.8,9.2,3.4] }) df2 = pd.DataFrame({ 'id': [1,2], 'val': [3.3,6.4] }) # 1. 筛选df1中取值完全恒定的列 constant_cols = df1.columns[df1.nunique() == 1].tolist() # 2. 给df2补充恒定列的取值 for col in constant_cols: df2[col] = df1[col].iloc[0] # 3. 拼接两个DataFrame,自动填充缺失列为NaN df3 = pd.concat([df1, df2], ignore_index=True) print(df3)
逻辑说明
- 第一步通过
nunique() == 1判断列是否所有值一致,筛选出所有恒定列,示例中得到的结果是['A', 'C'] - 第二步给df2补充所有恒定列的取值,直接取df1对应列的第一个值即可(恒定列所有值相同)
- 第三步拼接时Pandas会自动对齐列,df2中不存在的非恒定列会自动填充NaN,
ignore_index=True用来重置行索引,避免索引重复。
运行代码后输出的df3和你预期的结果完全一致。
内容的提问来源于stack exchange,提问作者emax
相关产品推荐
相关产品推荐

