У меня есть следующие df
,
id a_id b_id
1 25 50
1 25 50
2 26 51
2 26 51
3 25 52
3 28 52
3 28 52
У меня есть следующий код для присвоения a_id
и b_id
-1
, в зависимости от того, сколько строк в каждой из них имеет для каждогоid
значение в df
;если каждое из значений a_id
или b_id
имеет в точности те же строки / sub-df, что и определенное значение id
, эти строки a_id
и b_id
получают -1;
cluster_ids = df.loc[df['id'] > -1]['id'].unique()
types = ['a_id', 'b_id']
for cluster_id in cluster_ids:
rows = df.loc[df['id'] == cluster_id]
for type in types:
ids = rows[type].values
match_rows = df.loc[df[type] == ids[0]]
if match_rows.equals(rows):
df.loc[match_rows.index, type] = -1
так что результат df будет выглядеть так:
id a_id b_id
1 25 -1
1 25 -1
2 -1 -1
2 -1 -1
3 25 -1
3 28 -1
3 28 -1
Мне интересно, есть ли более эффективный способ сделать это.