首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在字符串匹配的基础上取熊猫的数据?

如何在字符串匹配的基础上取熊猫的数据?
EN

Stack Overflow用户
提问于 2022-09-13 12:46:58
回答 1查看 60关注 0票数 0

我试图通过两个字符串的共同点来匹配两个数据格式。例如,这就是代码:

代码语言:javascript
复制
import pandas as pd
import numpy as np
A = ['DF-PI-05', 'DF-PI-09', 'DF-PI-10', 'DF-PI-15', 'DF-PI-16',
       'DF-PI-19', 'DF-PI-89', 'DF-PI-92', 'DF-PI-93', 'DF-PI-94',
       'DF-PI-95', 'DF-PI-96', 'DF-PI-25', 'DF-PI-29', 'DF-PI-30',
       'DF-PI-34', 'DF-PI-84']

B = ['PI-05', 'PI-10', 'PI-89', 'PI-90', 'PI-93', 'PI-94', 'PI-95',
       'PI-96', 'PI-09', 'PI-15', 'PI-16', 'PI-19', 'PI-91A', 'PI-91b',
       'PI-92', 'PI-25-CU', 'PI-29', 'PI-30', 'PI-34', 'PI-84-CU-S1',
       'PI-84-CU-S2']


A = pd.DataFrame(A,columns=['ID'])
B = pd.DataFrame(B,columns=['Name'])
B['param_2'] = np.linspace(20,300,21)
A['param_1'] = np.linspace(0,20,17)

我想要一只熊猫数据,它的形状(21,3)列是“Name”,“param_1”,param_2。如果熊猫数据栏B中的“ID”与熊猫数据栏A中的“名称”匹配,我将从A和B中的其他列中得到值,如果“名称”不匹配,我就有NaN。

我试过下面的代码,但不起作用。

代码语言:javascript
复制
B['param_1'] = np.nan
for date_B, row_B in B.iterrows():
    
    for date_A, row_A in A.iterrows():
        if row_B['Name'] in row_A['ID']:
            row_B['param_1'] = row_A['param_1']


            break

我也更喜欢一些没有for循环的解决方案,因为我有一个大型的数据集,也许使用了pandas.isin()函数,我尝试过了,但是没有得到正确的结果。类似于本例中的内容:

Join dataframes based on partial string-match between columns

EN

回答 1

Stack Overflow用户

发布于 2022-09-13 14:05:15

试着向左连接:

代码语言:javascript
复制
A["_ID"] = A.ID.str[3:]
pd.merge(B,A, how="left", left_on="Name", right_on="_ID")[['Name','param_1', 'param_2']]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73703322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档