在两个不同的熊猫数据框之间循环和匹配字符串

时间:2019-03-20 07:10:58

标签: python pandas loops dataframe match

我有两个不同的数据帧df和df2,我想遍历df的每一行以搜索df2中特定行内的某些匹配项,并为每次匹配返回一个txt文件。

df =

name	Tec	   Location
jhon	js sr	      nz
mark	python ssr    us
alan	java jr	      mx

df2 =

company	        job	  Country	   Index
company a	js jr	      uk	    1
company b	python ssr    us	    2
company c	java jr	      mx	    3

到目前为止,我一直在做以下事情:

for index, row in df.iterrows():
    for indexb, rowb in df2.iterrows():
        if str(row.Tec) in str(rowb.job) and str(row.Location) in rowb.Country:              
            print ('Match with ' + str(rowb.company))
            sys.stdout= open(r'path\to\file\%s.txt'%(row['name']+ str(rowb.Index),), 'w')
    else:
        pass

我一直在获取错误的文本文件,或者在所有输出txt文件中重复的df2中的第一行。 我想将Tec与职位比较,将Tec与国家对比。 因此,例如,此情况的输出为: 标记2.txt,其中文件包含文本“与公司b匹配”

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

迭代行不是使用Pandas DataFrames的首选方式。

您可能想尝试加入df和df2。然后应用过滤器,将要保存的行保存到csv中。

df = pd.DataFrame([['jhon', 'js sr', 'nz'], ['mark', 'python ssr', 'us'], ['alan', 'java jr', 'mx']], columns=['name', 'Tec', 'Location'])
df2 = pd.DataFrame([['company a', 'js jr', 'uk'], ['company b', 'python ssr', 'us'], ['company c', 'java jr', 'mx']], columns=['company', 'job', 'Country'])
# Merge the two dataframes
df3 = df.merge(df2, how='right', left_on=['Tec', 'Location'], right_on=['job', 'Country'])
df3 = df3[df3['name'].notnull()]
df3['name'].to_csv('output.csv')