#python
Вопрос:
У меня есть 2 следующих кадра данных:
Ранг:
A B C D
0 85 88 44 80
1 22 34 80 92
2 80 80 2 31
и Ценность:
a b c d
0 0.671399 0.101208 -0.181532 0.241273
1 0.446172 -0.243316 0.051767 1.577318
2 0.614758 0.075793 -0.451460 -0.012493
В таблице «Значение» я хотел бы заменить все значения, для которых ранг > 80, значением, имеющим ранг = 80 (по столбцам)
До сих пор у меня был итеративный процесс, который занимает слишком много времени, и, безусловно, есть питонический способ сделать это с помощью сопоставления, но я не могу понять синтаксис. Спасибо за помощь
Ответ №1:
поскольку индексы совпадают, вы можете использовать .loc[] для установки значения, для этого можно использовать цикл for для всех столбцов
for column in value.columns:
value.loc[rank[column.upper()] > 80, column] = (
value.loc[list(rank[column.upper()]).index(80), column])
выход:
a b c d
0 0.614758 0.075793 -0.181532 0.241273
1 0.446172 -0.243316 0.051767 0.241273
2 0.614758 0.075793 -0.451460 -0.012493
Ответ №2:
Вы можете использовать where
функцию pandas для условной замены
(value.rename(columns=str.upper) # match column names with 'rank'
.where(rank <= 80, lambda x: x[rank == 80].max(), axis=1))
Выход
A B C D
0 0.614758 0.075793 -0.181532 0.241273
1 0.446172 -0.243316 0.051767 0.241273
2 0.614758 0.075793 -0.451460 -0.012493