Pandas在数据帧上合并,同时保持相同的行数

2024-05-29 05:15:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中有两个pandas数据帧,我想在公共列(例如id)上连接

第一个源数据帧是这样的

id  | col 
---------
1   | h1
2   | h2
3   | h3 
3   | h33
3   | h333
4   | h4 
6   | h6 

目标数据帧为

id  | col 
---------
1   | h11
2   | h2
3   | h%
3   | h3
4   | h4 
6   | h6 

这里,具有id=3的行有重复项。具有id=3的源数据帧有三行,id=3的目标数据帧有两行。我希望能够保留第一个公共行数(即两行),类似这样

id  | col 
---------
1   | h1  | h11
2   | h2  | h2 
3   | h3  | h%
3   | h33 | h3
4   | h4  | h4 
6   | h6  | h6

我尝试过简单的合并,比如熊猫

pd.concat(source_df , target_df, on="id")

我还能做些什么来实现这个逻辑吗?你知道吗


Tags: 数据id目标pandasdfcolh2h1
2条回答

我认为应该使用merge()函数

pd.merge(source_df, target_df, on="id", how='inner')

您可以根据需要使用mergeleftinner进行分组,但在此之前,您应该按id分组,并为每个id组提供带有rank的行号。你知道吗

import pandas as pd

source_df = pd.DataFrame({'id' : [1,2,3,3,3,4,6] , 'col' : ['h1','h2','h3','h33','h333','h4','h6']})
target_df = pd.DataFrame({'id' : [1,2,3,3,4,6] , 'col' : ['h11', 'h2','h%','h3','h4','h6']})

source_df["rn"] = source_df.groupby('id')['id'].rank(method='first')

target_df["rn"] = target_df.groupby('id')['id'].rank(method='first')

new_df = target_df.merge(source_df, on=['id','rn'] , how='left')

结果:

   id col_x   rn col_y
0   1   h11  1.0    h1
1   2    h2  1.0    h2
2   3    h%  1.0    h3
3   3    h3  2.0   h33
4   4    h4  1.0    h4
5   6    h6  1.0    h6

相关问题 更多 >

    热门问题