如何基于指定列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 ID | Title | Views | Rating |
|---|---|---|---|
| aaa | Video Title AAA | 100 | 99 |
| bbb | Video Title BBB | 30 | |
| ccc | Video Title CCC | 60 | 33 |
内容的提问来源于stack exchange,提问作者MarkWP
相关产品推荐
相关产品推荐

