You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定列ID合并数据并保留左表全部条目?

解决方法

你当前用的pd.merge()默认是内连接(inner join),只会保留两个DataFrame中Video ID匹配的行,所以缺少了bbb这条数据。要保留videos里的所有行,只需要把合并方式改成**左连接(left join)**即可,具体修改如下:

修改后的完整代码

import pandas as pd

videos_list = {
        'Video ID': ['aaa', 'bbb', 'ccc'],
        'Title': ['Video Title AAA', 'Video Title BBB', 'Video Title CCC'],
        'Views': ['100', '30', '60']}

transcripts_list = {
        'Title': ['Video Title AAA', 'Video Title CCC'],
        'Video ID': ['aaa', 'ccc'],
        'Rating': ['99', '33']}

videos = pd.DataFrame(videos_list)
transcripts = pd.DataFrame(transcripts_list)

## VIEW Videos and Transcript TABLES
print('--- VIDEOS:\n',list(videos.columns.values),'\n',videos.head(5),'\n')
print('--- Transcripts:\n',list(transcripts.columns.values),'\n',transcripts.head(5),'\n')


## Remove 'Title' from transcripts
transcript_cols = [
    'Video ID',
    'Rating',
    ]
transcript_reindex = transcripts.reindex(columns=transcript_cols)
print('--- Transcript Reindex:\n',list(transcript_reindex.columns.values),'\n',transcript_reindex.head(5),'\n')


## Merge videos + transcript_reindex(修改此处,添加how='left')
transcript_video = pd.merge(videos, transcript_reindex, left_on='Video ID', right_on='Video ID', how='left')
print('Video + Transcript:\n',list(transcript_video.columns.values),'\n',transcript_video.head(5))
transcript_video.to_excel('Results.xlsx', index=False, na_rep='')

修改说明

  • 在pd.merge()中添加how='left'参数,指定以左边的videos为基准,保留其所有行;右边transcripts中没有匹配的行,对应列会填充空值,通过to_excel的na_rep=''参数设置为空字符串。

运行后得到的结果

Video IDTitleViewsRating
aaaVideo Title AAA10099
bbbVideo Title BBB30
cccVideo Title CCC6033

内容的提问来源于stack exchange,提问作者MarkWP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:45:34