У меня есть некоторые проблемы с использованием цикла for в моем фрагменте кода.
У меня есть два кадра данных. Один основной фрейм данных, над которым я работаю, и дополнительный фрейм данных, в котором хранятся идентификаторы клиентов, которые, как известно, дублируются. Это означает, что один и тот же клиент имеет два (или более) идентификатора в системе, поскольку он мог зарегистрироваться более одного раза.
Основной фрейм данных выглядит следующим образом (в нем больше столбцов, чем 3): data
index ID gender ...
0 22 M
1 23 F
2 24 F
3 33 F
4 34 M
5 35 F
6 67 F
7 68 F
Дополнительный фрейм данных:
duplicatedIDs
index primaryID secondaryID
0 22 34
1 23 33
2 35 68
Мой текущий код выглядит так:
Это немного для определения индексов строк в duplicatedIDs
df, где хранятся дублированные идентификаторы:
n_index = [] # Row index in duplicate_df of duplicated ids
for j in range(1,len(duplicatedIDs['primaryID'])):
if ( (duplicatedIDs['primaryID'][j] in (
data['ID'].values)) & (duplicatedIDs['secondaryID'] [j] in (data['ID'].values))):
n_index.append(j);
Фрагмент кода для замены дублированных идентификаторов. Я использую secondaryID
в качестве основного:
for j in n_index:
if ( (duplicatedIDs['primaryID'][j] in (data['ID'].values)) & (duplicatedIDs['secondaryID'][j] in (data['ID'].values))):
data.loc[data['ID'] == duplicatedIDs['primaryID'][j], 'ID'] = duplicatedIDs['secondaryID'][j]
Я хочу избежать цикла for, поскольку duplicatedIDs
df имеет десятки тысяч строк, и для его завершения требуется некоторое время. Я пытался что-то сделать с np.select
или np.where
, но не могу заставить их работать как-то на одном уровне строк.
Основной кадр данных после манипуляции должен выглядеть следующим образом:
index ID gender ...
0 34 M
1 33 F
2 24 F
3 33 F
4 34 M
5 68 F
6 67 F
7 68 F