Цикл и сопоставление строк между двумя разными пандами. - PullRequest
0 голосов
/ 20 марта 2019

У меня есть два разных кадра данных 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

Я продолжаю получать текстовые файлы с неправильными совпадениями или с первой строкой из df2, повторяемой во всех выходных текстовых файлах. Я хочу сравнить Tec с работой и местоположением с страной. Так, например, выход для этого случая будет: пометка 2.txt, где файл содержит текст «Совпадение с компанией b»

Есть идеи?

1 Ответ

0 голосов
/ 20 марта 2019

Итерация строк не является предпочтительным способом работы с 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')
...