У меня есть датафрейм, подобный этому:
UniqueID CST WEIGHT VOLUME PRODUCTIVITY
0 413-20012 3 123 12 1113
1 413-45365 1 889 75 6748
2 413-21165 8 554 13 4536
3 413-24354 1 387 35 7649
4 413-34658 2 121 88 2468
5 413-36889 4 105 76 3336
6 413-23457 5 355 42 7894
7 413-30089 5 146 10 9112
8 413-41158 5 453 91 4545
9 413-51015 9 654 66 2232
И у меня есть словарь родительских: дочерних сопоставлений для уникальных идентификаторов:
parent_child_dict = {
'413-51015': '413-41158',
'413-21165': '413-23457',
'413-45365': '413-41158',
'413-20012': '413-23457'
}
Что мне нужно сделать, это l oop через Dataframe и замените значения WEIGHT, VOLUME и PRODUCTIVITY «дочернего» строки UniqueID на значения из «родительского» строки UniqueID, где результирующий Dataframe будет выглядеть следующим образом:
UniqueID CST WEIGHT VOLUME PRODUCTIVITY
0 413-20012 3 355 42 7894
1 413-45365 1 453 91 4545
2 413-21165 8 355 42 7894
3 413-24354 1 387 35 7649
4 413-34658 2 121 88 2468
5 413-36889 4 105 76 3336
6 413-23457 5 355 42 7894
7 413-30089 5 146 10 9112
8 413-41158 5 453 91 4545
9 413-51015 9 453 91 4545
Я экспериментировал с несколькими возможными решениями, и проблема, с которой я столкнулся, заключается в том, чтобы ограничить копирование таким образом, чтобы значения UniqueID и CST строки 'child' были сохранены, но другие значения были скопированы.
Самое близкое, что я получил, это al oop через словарь, где каждая пара соединяется с этим:
df.loc[df['UniqueID'] == '413-51015'] = df.loc[df['UniqueID'] == '413-41158'].to_numpy()
Это, кажется, приятно заменяет все значения из одной строки в другую.
Любая помощь по исключениям или лучшее решение в целом было бы чрезвычайно полезно. Спасибо.
РЕДАКТИРОВАТЬ
Я зациклил первое решение на столбцы, которые я хочу изменить в наборе данных следующим образом:
columns = []
for col in df.columns:
columns.append(col)
remove_perm = columns.remove('UniqueID')
remove_perm = columns.remove('CST')
print(columns)
OUTPUT
['WEIGHT', 'VOLUME', 'PRODUCTIVITY']
Затем
for col in columns:
s = df[['UniqueID', col]].set_index('UniqueID')
df[col] = s.loc[df['UniqueID'].replace(parent_child_dict)].to_numpy()
Это привело к желаемому набору данных.