Я пытаюсь написать скрипт, который будет перебирать df на основе дубликатов столбцов («электронные письма») и обновлять информацию из более старой строки в самую последнюю (column = "Created On"). Некоторые данные в самой последней строке - это NaN, поэтому эти данные должны быть обновлены более старой строкой, если эта строка не является NaN. Мой набор данных очень большой и имеет много столбцов. Я отсортировал список в правильном порядке следующим образом:
crm_dupes_s = dupes_df.sort_values(["Email", "Created On"], ascending=False)
crm_dupes_s.head(25)
Затем убедился, что значения NaN читаются правильно:
crm_dupes_nan = crm_dupes_s.replace('nan', np.NaN)
crm_dupes_nan.isna()
Full Name First Name Middle Name Last Name Status Email Created On
0 False False True True False False False
1 False False True False False False False
Перечислены столбцы для последующей итерации цикла, но удаленыадрес электронной почты, поскольку эти значения не обновляются:
cols_to_change = list(crm_dupes_nan.columns)
cols_to_change.remove('Email')
cols_to_change
[' Full Name',
'First Name',
'Middle Name',
'Last Name',
'Status',
'Created On']
Наконец, вот мой цикл for:
#Iterates through all rows
for i in range(0, crm_dupes_nan.shape[0]):
#If there is a value for Email
if not pd.isna(crm_dupes_nan.iloc[i-1, :]['Email']):
#If the row Email values are the same "duplicates" then execute cell value change
if crm_dupes_nan.iloc[i-1, :]['Email'] == crm_dupes_nan.iloc[i, :]['Email']:
for col in cols_to_change:
if not pd.isna(crm_dupes_nan.iloc[i-1, :][col]):
crm_dupes_nan.iloc[i-1, :][col] = crm_dupes_nan.iloc[i, :][col]
Я знаю, что первые 3 строки правильно распознают дубликаты, но "iloc"функции не меняют значения NaN ?? Я попытался "iat", "set_value", "replace" и "where" и получил различные проблемы со всеми из них. У меня сложилось впечатление, что iloc был предпочтительным методом для выполнения задач и выполнения. Любая помощь будет принята с благодарностью !!!
Full Name First Name Middle Name Last Name Status Email Account Numbers Primary Account Number Business Phone Home Phone
0 Zac Daniels Zac NaN Hopkins Active zdaniels@gmail.com NaN 3452432.0 NaN NaN
1 Zac Daniels Zac NaN Hopkins Active zdaniels@gmail.com 13254512.0 4564534.0 (949) 803-8033 (817) 817-9177
2 Zach Fred Zach NaN Wilbern Active zFredericks@miami.com 45632532.0 12342313.0 (313) 313-3133 (313) 313-3133