Pandas 多个数据帧的内部联接
问题与Python/pandas相同,但尝试在Python/pandas中使用相同的方法,因为在写入SQLite DB时,我无法在pandas中设置PK/FK(df.to_sql没有API可以这样做),这使得sql速度太慢 我有一个数据帧“通道” 数据帧“视频” 数据帧“注释” 关键是:Pandas 多个数据帧的内部联接,pandas,dataframe,inner-join,Pandas,Dataframe,Inner Join,问题与Python/pandas相同,但尝试在Python/pandas中使用相同的方法,因为在写入SQLite DB时,我无法在pandas中设置PK/FK(df.to_sql没有API可以这样做),这使得sql速度太慢 我有一个数据帧“通道” 数据帧“视频” 数据帧“注释” 关键是: channel.channelId=video.channelId=comment.videoID\u channelId video.videoId=comment.videoId 我需要: 至少有1个
- channel.channelId=video.channelId=comment.videoID\u channelId
- video.videoId=comment.videoId
- 至少有1个视频和1条评论的所有频道
- 至少有一个频道和一条评论的所有视频
- 所有评论均带有视频和频道
channelId
a
b
videoId | channelId
1 | a
2 | b
commentID | videoID | videoID_channelID
xx | 1 | a
yy | 2 | b
我知道我可以对2个数据帧进行内部连接,如:
pd.merge(channel, video, left_on='channelId', right_on='channelId', how='inner')
但我如何才能对3个索引不同的数据帧执行此操作?合并两次如何?如上面的评论所示,对于第一次合并,您可以更简洁地重写代码:
channel.merge(video,on='channelId')
,因为它们都有相同的键列,而internal
join是默认值。因此您的整个代码应该是:channel.merge(video,on='channelId').merge(comment,左上=['channelId','videoId'],右上=['videoId','videoId']
该合并为我提供了所有3个数据帧中的所有列,但不提供单个数据帧中仅包含我需要的该数据帧中的列的数据帧?
commentID | videoID | videoID_channelID
xx | 1 | a
yy | 2 | b
zz | 5 | e
tt | 6 | f
channelId
a
b
videoId | channelId
1 | a
2 | b
commentID | videoID | videoID_channelID
xx | 1 | a
yy | 2 | b
pd.merge(channel, video, left_on='channelId', right_on='channelId', how='inner')