У меня есть фрейм данных, где мне нужно сгруппировать по столбцу x и изменить все значения столбца a в каждой группе на вычисленное, но постоянное значение для каждой группы.
Я начинаю с такого кадра данных:
x | a | b
------+------+-----
a | -1 | ...
b | -1 | ...
c | -1 | ...
a | -1 | ...
b | -1 | ...
c | -1 | ...
и хотите преобразовать его в приведенный ниже кадр данных, сгруппировав по столбцу x и изменив столбец a на возвращение функции f
p = ["k", "l"]
def f(group_number, list):
return list[group_number % len(list)]
x | a | b
------+-------------------+-----
a | f(ngroup(a), p) | ...
b | f(ngroup(b), p) | ...
c | f(ngroup(c), p) | ...
a | f(ngroup(a), p) | ...
b | f(ngroup(b), p) | ...
c | f(ngroup(c), p) | ...
ngroup - это некоторая функция, которая делает именно то, что делает pandas.core.groupby.GroupBy.ngroup () - она возвращает число для каждой группы.
Общий результат должен быть
x | a | b
------+-----+-----
a | k | ...
b | l | ...
c | k | ...
a | k | ...
b | l | ...
c | k | ...
, где все записи с a имеют одинаковое значение ( k ), все с b имеют значение l и все с c тоже имеют значение k .
Как мне этого добиться?