Вы можете использовать столбец, для которого вы хотите заказать другой DataFrame
, в качестве индекса:
import pandas as pd
d1 = ['23.OH3', '28.OG2', '28.OI1', '40.OE1', '50.OF1']
d2 = ['28.OI1', '23.OH3', '40.OE1', '28.OG2']
abc_d = {'batch_id': [1, 1, 2, 2, 3], 'file_number': d1}
xyz_d = {'file_name': d2}
abc = pd.DataFrame(data = abc_d)
xyz = pd.DataFrame(data = xyz_d)
idx = pd.Index(xyz.file_name)
abc.set_index('file_number').loc[idx].reset_index()
Он должен работать до тех пор, пока len(abc) >= len(xyz)
, строки, отсутствующие в xyz
, будутбыть отброшенным.
Редактировать: Вы можете удалить пропущенные строки независимо от len(abc)
и len(xyz)
следующим образом:
d1 = ['23.OH3', '28.OG2', '28.OI1', '40.OE1']
d2 = ['28.OI1', '23.OH3', '40.OE1', '28.OG2', '50.OF1']
abc_d = {'batch_id': [1, 1, 2, 2], 'file_number': d1}
xyz_d = {'file_number': d2}
abc = pd.DataFrame(data = abc_d)
xyz = pd.DataFrame(data = xyz_d)
idx = pd.Index(xyz.file_number)
not_missing = xyz.file_number.isin(abc.file_number)
idx = idx[not_missing]
abc.set_index('file_number').loc[idx].reset_index()