Вот один из способов.Могут быть и другие, более элегантные решения, но это должно сработать и будет гораздо более эффективным, чем вложенный цикл.
Сначала создайте два дополнительных столбца, которые мы назовем 'ADDRESS_1'
и 'ADDRESS_2'
.Первый всегда будет содержать любой лексикографически первый адрес, что позволит вам затем сгруппировать данные по желанию в эти новые столбцы, поскольку вам больше не нужно беспокоиться о случае, когда адреса инвертируются и обрабатываются отдельно.
df['ADDRESS_1'] = df[['ADDRESS1', 'ADDRESS2']].values.min(axis=1)
df['ADDRESS_2'] = df[['ADDRESS1', 'ADDRESS2']].values.max(axis=1)
Затем используйте groupby
:
grouped = df.groupby(['ADDRESS_1', 'ADDRESS_2']).mean()[['COUNTX']].reset_index()
Результаты:
ADDRESS_1 ADDRESS_2 COUNTX
0 ad1 ad3 21.5
1 ad1 ad4 22.0
2 ad1 ad5 24.0
3 ad2 ad4 24.0
4 ad4 ad6 21.0
Это не соответствует вашему примеру вывода, так как порядок адресов теряется, но из вашегоописание проблемы, я не думаю, что это было важно.Пожалуйста, прокомментируйте ниже, если это не так.