Вопрос: Как вы группируете df
на основе переменной, производите вычисления, используя цикл for
?
Задача состоит в том, чтобы сделать условное вычисление на основе значения в столбце. Но вычислительные константы зависят от значения в справочном столбце. Учитывая это df
:
In [55]: df = pd.DataFrame({
...: 'col1' : ['A', 'A', 'B', np.nan, 'D', 'C'],
...: 'col2' : [2, 1, 9, 8, 7, 4],
...: 'col3': [0, 1, 9, 4, 2, 3],
...: })
In [56]: df
Out[56]:
col1 col2 col3
0 A 2 0
1 A 1 1
2 B 9 9
3 NaN 8 4
4 D 7 2
5 C 4 3
Я использовал решение здесь , чтобы вставить столбец 'math'
, который берет остаток от col3
и добавляет 10. Но теперь я хочу перебрать список, чтобы установить зависимость от вычислительной переменной на значения в col1
. Вот результат:
In [57]: items = ['A', 'D']
In [58]: for item in items:
...: df.loc[:, 'math'] = df.loc[df['col1'] == item, 'col3']
...:
In [59]: df
Out[59]:
col1 col2 col3 math
0 A 2 0 NaN
1 A 1 1 NaN
2 B 9 9 NaN
3 NaN 8 4 NaN
4 D 7 2 2.0
5 C 4 3 NaN
Очевидная проблема заключается в том, что df перезаписывается на каждой итерации. Столбец math
для индексов 0 и 1 вычисляет значения на первой итерации, но они удаляются на второй итерации. В результате df
учитывает только последний элемент списка.
Я мог бы пройтись и добавить кодирование для итерации по каждому значению индекса - но это кажется более жалким, чем Pythonic.
Ожидаемый результат для .mul()
примера
In [100]: df
Out[100]:
col1 col2 col3 math
0 A 2 0 0.0
1 A 1 1 10.0
2 B 9 9 NaN
3 NaN 8 4 NaN
4 D 7 2 20.0
5 C 4 3 NaN