Pandas:在Pandas.merge中的ON参数中传递多个条件

2024-05-13 19:29:03 发布

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

如果键匹配和列id不匹配,如何合并两个数据帧

testchunck1.csv:

excel1 user_id public_key
0      Mark    key1
1      Rhonda  key2
2      Clara   key3
3      Riley   key4

testchunck2.csv:

excel2 user_id public_key
0      Ron     key2
1      Russel  key1
2      Dwyane  key2
3      Abrax   key4

输出_df:

           userid_left  public_key  userid_right
    0      Mark         key1        Russel 
    1      Rhonda       key2        Ron 
    2      Rhonda       key2        Dwyane

注意key4在两个DFs中都匹配,但ID(3)相同,因此它不在输出中

我的代码:

test1Excel = pd.read_csv("testchunk.csv")
test2Excel = pd.read_csv("testchunk2.csv")

df = pd.merge(test1Excel,test2Excel, on='public_key', how='inner', suffixes = ('_left','_right')).dropna()
  1. 尝试在合并后使用.filter()筛选出行,但 不成功
  2. 尝试读取excel的每一行以检查 ID匹配,但这需要很多时间
  3. 试图通过一个条件 在on参数本身中,但它不允许这样做

于是转为如此


Tags: csvkeyiddfpublicpdmarkkey2
1条回答
网友
1楼 · 发布于 2024-05-13 19:29:03

尝试:

df = pd.merge(test1Excel.loc[test1Excel["public_key"].str.startswith("key")].reset_index(),test2Excel.loc[test2Excel["public_key"].str.startswith("key")].reset_index(), on='public_key', how='inner', suffixes = ('_left','_right')).dropna().query("index_left!=index_right").drop(columns=["index_left", "index_right"])

产出:

  excel1 user_id_left public_key excel2 user_id_right
0      0         Mark       key1      1        Russel
1      1       Rhonda       key2      0           Ron
2      1       Rhonda       key2      2        Dwyane

相关问题 更多 >