如何在pandas中按行顺序合并无共同列的两个DataFrame
可行的实现方法
你完全不需要设置共同列即可实现按行顺序拼接列的需求,有以下几种简单方案:
方案1:直接赋值(最简洁)
直接把y_pred的pred_score列按顺序赋值给data即可,.values会取出numpy数组,忽略双方的索引差异,仅按行顺序匹配:
data['pred_score'] = y_pred['pred_score'].values
操作完成后data就是你需要的结果。
方案2:横向拼接(concat)
如果不想修改原data,可以用pd.concat沿列方向拼接,需要先重置双方索引避免索引不匹配导致的空值问题:
new_df = pd.concat( [data.reset_index(drop=True), y_pred[['pred_score']].reset_index(drop=True)], axis=1 ) # 如果需要保留原来data的索引,可以加下面这行 new_df.index = data.index
方案3:用行号作为临时合并键(仅当你需要用merge逻辑时可选)
如果一定要用merge实现,你可以用行号代替之前的固定值tmp作为合并键,避免笛卡尔积:
data['row_idx'] = range(len(data)) y_pred['row_idx'] = range(len(y_pred)) new_df = pd.merge(data, y_pred, on='row_idx', how='left').drop('row_idx', axis=1)
说明
以上所有方案的前提是:两个DataFrame行数完全一致,且行顺序严格对应你需要的匹配关系,否则会出现列值匹配错误。
你之前得到笛卡尔积结果是正常的:当合并键所有行的值都相同时,merge会返回两个表所有行的两两组合,30行*30行自然得到900行结果。
内容的提问来源于stack exchange,提问作者ga1996
相关产品推荐
相关产品推荐

