Я пытаюсь изменить набор столбцов из набора строк и, конечно, я получаю предупреждение о:Правильная модификация ломтик DataFrame
A value is trying to be set on a copy of a slice from a DataFrame
Я видел подобный вопрос here, но не может обернуть мой голову вокруг него.
Так что, если мы будем следовать этому пример кода:
from random import random as rd
ex= pd.DataFrame([{"group": ["a","b"][int(round(rd()))], "colA": rd()*10, "colB": rd()*10, "colC": rd()*10, "colD": rd()*10} for _ in range(20)])
cols = [col for col in ex.columns if col != "group"]
Я хотел бы изменить только те строки, которые принадлежат group a
и только на колонках cols
, для которых я как бы интуитивно идут попробовать (и получить предупреждение предостережение):
ex[ex["group"]=="a"][cols] = ex[ex["group"]=="a"][cols]/ex.ix[0,cols]
количество столбцов совпадают и имеют одинаковые метки, так что мне интересно, если бы пойти один за другим, как:
for idx in ex[ex["group"]=="a"].index:
for col in cols:
ex.ix[idx, col]=ex.ix[idx, col]/ex.ix[0,col]
Это, конечно, работает, но похоже на шаг назад. Итак, каков был бы правильный способ сделать что-то подобное?
ОК, это звучит намного лучше! Большое спасибо! – Animismus
В качестве обновления: при работе с именами столбцов, которые являются поплавками, например. '' '[1.1, 2.1, 3.4, 4.5]' '' вместо '' '[" colA "," colB "," colC "," colD "]' '' срез будет работать, когда вы хотите посмотреть это, но если вы хотите сделать атрибуцию этого фрагмента, это не сработает! – Animismus
Как правило, не рекомендуется использовать поплавки для значений столбцов или индексов – EdChum