我试图通过两个字符串的共同点来匹配两个数据格式。例如,这就是代码:
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。
我试过下面的代码,但不起作用。
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
发布于 2022-09-13 14:05:15
试着向左连接:
A["_ID"] = A.ID.str[3:]
pd.merge(B,A, how="left", left_on="Name", right_on="_ID")[['Name','param_1', 'param_2']]https://stackoverflow.com/questions/73703322
复制相似问题