基于Python中的多个条件将来自多个数据帧的一列合并到另一个数据帧

假设我有一个名为df如下的组合数据框。每行都有建筑物的信息及其匹配的建筑物的信息。我希望合并id来自 df1、df2 和 df3 的每个建筑物(见下文)。df_num或的列matched_df_num用于区分建筑物信息来自哪个数据框,如果它等于 1,则表示它来自df1,2 表示来自df2,3 表示来自df3。


   df_num       city                             name  matched_df_num  \

0      1   Shenzhen                      Kingkey 100              2   

1      2   Shenzhen           Ping An Finance Centre              2   

2      2   Shenzhen           Ping An Finance Centre              3   

3      2  Guangzhou     Guangzhou CTF Finance Centre              3   

4      3   Shanghai  Shanghai World Financial Center              3   


  matched_city                     matched_name  similarity_ratio  

0     Shenzhen           Ping An Finance Centre                51  

1    Guangzhou     Guangzhou CTF Finance Centre                66  

2     Shanghai  Shanghai World Financial Center                59  

3     Shanghai  Shanghai World Financial Center                56  

4     Changsha            Changsha IFS Tower T1                57  

我想合并的列id从s df1,df2和df3下面的建筑物名称和匹配的名称:


df1 = pd.DataFrame(np.array([

    [1010667747, 'Suzhou', 'Suzhou IFS'],

    [1010667356, 'Shenzhen', 'Kingkey 100'],

    [1010667289, 'Wuhan', 'Wuhan Center']]),

    columns=['id', 'city', 'name']

)

df2 = pd.DataFrame(np.array([

    [190010, 'Shenzhen', 'Ping An Finance Centre'],

    [190012, 'Guangzhou', 'Guangzhou CTF Finance Centre'],

    [190015, 'Beijing', 'China Zun']]),

    columns=['id', 'city', 'name']

)

df3 = pd.DataFrame(np.array([

    ['ZY-13', 'Shanghai', 'Shanghai World Financial Center'],

    ['ZY-15', 'Hong Kong', 'International Commerce Centre'],

    ['ZY-16', 'Changsha', 'Changsha IFS Tower T1']]),

    columns=['id', 'city', 'name']

)


有只小跳蛙
浏览 199回答 2
2回答

至尊宝的传说

您可以使用concatwithmerge和 left join:dff = pd.concat([df1, df2, df3])print (dff)           id       city                             name0  1010667747     Suzhou                       Suzhou IFS1  1010667356   Shenzhen                      Kingkey 1002  1010667289      Wuhan                     Wuhan Center0      190010   Shenzhen           Ping An Finance Centre1      190012  Guangzhou     Guangzhou CTF Finance Centre2      190015    Beijing                        China Zun0       ZY-13   Shanghai  Shanghai World Financial Center1       ZY-15  Hong Kong    International Commerce Centre2       ZY-16   Changsha            Changsha IFS Tower T1df = df.merge(dff,on = ['city', 'name'], how = 'left')print (df)   df_num       city                             name  matched_df_num  \0       1   Shenzhen                      Kingkey 100               2   1       2   Shenzhen           Ping An Finance Centre               2   2       2   Shenzhen           Ping An Finance Centre               3   3       2  Guangzhou     Guangzhou CTF Finance Centre               3   4       3   Shanghai  Shanghai World Financial Center               3     matched_city                     matched_name  similarity_ratio          id  0     Shenzhen           Ping An Finance Centre                51  1010667356  1    Guangzhou     Guangzhou CTF Finance Centre                66      190010  2     Shanghai  Shanghai World Financial Center                59      190010  3     Shanghai  Shanghai World Financial Center                56      190012  4     Changsha            Changsha IFS Tower T1                57       ZY-13然后再次合并,为避免重复列使用rename:d = {'city':'matched_city','name':'matched_name', 'id':'matched_id'}df5 = df.merge(dff.rename(columns=d),on = ['matched_city', 'matched_name'], how = 'left')print (df5)   df_num       city                             name  matched_df_num  \0       1   Shenzhen                      Kingkey 100               2   1       2   Shenzhen           Ping An Finance Centre               2   2       2   Shenzhen           Ping An Finance Centre               3   3       2  Guangzhou     Guangzhou CTF Finance Centre               3   4       3   Shanghai  Shanghai World Financial Center               3     matched_city                     matched_name  similarity_ratio          id  \0     Shenzhen           Ping An Finance Centre                51  1010667356   1    Guangzhou     Guangzhou CTF Finance Centre                66      190010   2     Shanghai  Shanghai World Financial Center                59      190010   3     Shanghai  Shanghai World Financial Center                56      190012   4     Changsha            Changsha IFS Tower T1                57       ZY-13     matched_id  0     190010  1     190012  2      ZY-13  3      ZY-13  4      ZY-16   编辑:您可以DataFrame.assign首先向每个 DataFrame 添加新值,然后也通过此列合并:dff = pd.concat([df1.assign(df_num=1), df2.assign(df_num=2), df3.assign(df_num=3)])df = df.merge(dff,on = ['city', 'name','df_num'], how = 'left')d = {'city':'matched_city','name':'matched_name', 'id':'matched_id','df_num':'matched_df_num'}df5 = (df.merge(dff.rename(columns=d),                 on = ['matched_city', 'matched_name','matched_df_num'],                 how = 'left'))print (df5)   df_num       city                             name  matched_df_num  \0       1   Shenzhen                      Kingkey 100               2   1       2   Shenzhen           Ping An Finance Centre               2   2       2   Shenzhen           Ping An Finance Centre               3   3       2  Guangzhou     Guangzhou CTF Finance Centre               3   4       3   Shanghai  Shanghai World Financial Center               3     matched_city                     matched_name  similarity_ratio          id  \0     Shenzhen           Ping An Finance Centre                51  1010667356   1    Guangzhou     Guangzhou CTF Finance Centre                66      190010   2     Shanghai  Shanghai World Financial Center                59      190010   3     Shanghai  Shanghai World Financial Center                56      190012   4     Changsha            Changsha IFS Tower T1                57       ZY-13     matched_id  0     190010  1     190012  2      ZY-13  3      ZY-13  4      ZY-16  

慕丝7291255

试试这个,它可能会帮助你解决你的问题    df1 = pd.DataFrame(np.array([[1010667747, 'Suzhou', 'Suzhou IFS'],[1010667356, 'Shenzhen', 'Kingkey 100'],[1010667289, 'Wuhan', 'Wuhan Center']]),columns=['id', 'city', 'name'])df2 = pd.DataFrame(np.array([    [190010, 'Shenzhen', 'Ping An Finance Centre'],    [190012, 'Guangzhou', 'Guangzhou CTF Finance Centre'],    [190015, 'Beijing', 'China Zun']]),    columns=['id', 'city', 'name'])df3 = pd.DataFrame(np.array([    ['ZY-13', 'Shanghai', 'Shanghai World Financial Center'],    ['ZY-15', 'Hong Kong', 'International Commerce Centre'],    ['ZY-16', 'Changsha', 'Changsha IFS Tower T1']]),    columns=['id', 'city', 'name'])df1['df_type'] = 1df2['df_type'] = 2df3['df_type'] = 3df = pd.concat([df1,df2,df3])df
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python