У меня есть этот фрейм данных, и мне нужно сохранить только те строки, которые имеют обратные значения для 2 столбцов (здесь numA и numB).
gpm = pd.DataFrame(data={
'id':[1,2,3,4,5,6,7,8,9],
'time':[150315,150315,150315,150315,150315,150315,150315,150315,150315],
'numA':['A','D','C','B','A','C','A','E','D'],
'numB':['B','C','B','A','B','D','B','A','A'],
'antA':['MSPDV','VIELU','RMPC1','MJCIH','PALT2','M2PV3','MACIF','MACIF','VIELU'],
'antB':['BPDV8','0GRI3','SSFDJ','SSFDJ','SSFDJ','CCPG1','0GRI3','SSFDJ','SSFDJ']
})
Мне нужны только строки, в которых столбцы numA и numB являются взаимными. То есть, сохраняя все строки, где встречаются пары (A, B), (B, A) и (C, D), (D, C).
Мое решение на данный момент заключается в составлении списка всех уникальных идентификаторов и прохождении каждой строки, чтобы выяснить, есть ли фактический партнер в списке партнеров
это очень медленно .... (и, возможно, неправильно!)
## here's my code
parties = {}
nums = gpm['numA']+gpm['numB']
for i in nums.unique():
parties[i] = gpm['numB'][gpm['numA'] == i]
parties[i] = gpm['numA'][gpm['numB'] == i]
new_d = gpm.iloc[[0]]
for i in np.arange(1,gpm.shape[0]):
numa = gpm.iloc[i]['numA']
if gpm.iloc[i]['numB'] in parties[numa]:
new_d.append(gpm.iloc[[i]])
любой опытный кодер, который может помочь ускорить это? Фактический файл для анализа - ~ 15GB csv.
Спасибо