У меня есть 2 файла CSV:
CSV 1 — исходные_имена.csv
Serial,Names
1,James
2,Stephen
3,Ben
4,Harry
5,Jack
6, Peter
CSV 2 — dup_names.csv
Serial,Names
1,James
2,Kate
3,Ben
4,Sara
Желаемый результат — new.csv
Serial,Names,flag
1,0,T
2,Kate,F
3,0,T
4,Sara,F
5,Jack,F
6,Peter,F
Как видите, одни и те же имена в обоих CSV будут обновлены до 0, если имена совпадают с new.csv.
Вот что я пробовал:
import pandas as pd
df1 = pd.read_csv('original_names.csv')
df2 = pd.read_csv('dup_names.csv')
out = df1.merge(df2['names'], how='inner', on = 'names')
# some code
out.to_csv("new.csv", index=False)
Спасибо за ваше время :)
2 ответа
Сделайте внешнее соединение, а затем просто добавьте сюда немного логики. Если 2 столбца имен совпадают, поставьте флаг 'T'
, иначе поставьте 'F'
. Затем замените 'names'
на 0
на 'T'
, иначе имя во втором CSV. Если во втором CSV-файле нет имени, заполните его именем из первого CSV-файла.
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'serial':[1,2,3,4,5,6],
'names':['James','Stephen','Ben','Harry','Jack','Peter']})
df2 = pd.DataFrame({'serial':[1,2,3,4,],
'names':['James','Kate','Ben','Sara']})
out = df1.merge(df2, how='outer', on = ['serial'])
out['flag'] = np.where(out.names_x == out.names_y, 'T', 'F')
out['names'] = np.where(out.flag == 'T', 0, out.names_y)
out['names'] = out['names'].fillna(out.names_x)
out = out[['serial', 'names', 'flag']]
out.to_csv("new.csv", index=False)
Вывод:
print(out)
serial names flag
0 1 0 T
1 2 Kate F
2 3 0 T
3 4 Sara F
4 5 Jack F
5 6 Peter F
Вы можете использовать:
import pandas as pd
import numpy as np
df1 = pd.read_csv('original_names.csv')
df2 = pd.read_csv('dup_names.csv')
out = df1.merge(df2, how='left', on = 'Serial')
out['Names'] = np.where(out['Names_x'] == out['Names_y'],
0, out['Names_y'])
out['Names'] = out['Names'].fillna(out['Names_x'])
out['flag'] = np.where(out['Names'] == 0, 'T', 'F')
out = out.drop(['Names_x', 'Names_y'], axis=1)
out.to_csv('new.csv', index=False)
Вывод:
serial names flag
0 1 0 T
1 2 Kate F
2 3 0 T
3 4 Sara F
4 5 Jack F
5 6 Peter F
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.