Проблема заключается в том, что метки в столбце 0 и столбце 1 должны восприниматься как пара, поэтому один isin
не будет работать
Во-первых, необходим список пар меток для сравнения с (forward
в коде).Учитывая, что (a,b)
совпадает с (b,a)
, все экземпляры будут просто заменены на (a,b)
Тогда все дублирующиеся метки будут переименованы в порядке a,b
, даже если верхняя строка равна b,a
.Это необходимо, чтобы выполнить шаг группировки позже.
In [293]: df['pair'] = df[[0, 1]].apply(l, axis=1)
Затем, чтобы учесть значение столбца 2 (третий столбец слева), исходные данные группируются, и минимальный размер группы сохраняется.Это будут удаляемые строки.
In [297]: dfi = df.set_index(['pair',2])
In [298]: to_drop = df.groupby([0,1])[2].min().reset_index().set_index([0,1,2]).index
In [299]: dfi['drop'] = dfi.index.isin(to_drop)
In [300]: dfr = dfi.reset_index()
Строки удаляются по номеру индекса, для которого столбец drop имеет значение True.Временный столбец «drop» также удаляется.
In [301]: df_dropped = dfr.drop(np.where(dfr['drop'])[0], axis=0).drop('drop', axis=1)
In [302]: df_dropped
Out[302]:
0 1 2 3 4 5 6 7 8 9 10 11
0 TRINITY_DN16813_c0_g1_i3 TRINITY_DN16813_c0_g1_i4 96.491 228 8 0 202 429 417 190 3.050000e-104 377