Pandas: Как я могу использовать функцию apply() для одного столбца?

У меня есть кадр данных pandas с двумя столбцами. Мне нужно изменить значения первого столбца, не влияя на второй, и вернуть весь кадр данных с измененными только значениями первого столбца. Как я могу это сделать, применяя в pandas?

Ответ 1

Для образца данных df как:

a,b
1,2
2,3
3,4
4,5

что вы хотите:

df['a'] = df['a'].apply(lambda x: x + 1)

который возвращает:

   a  b
0  2  2
1  3  3
2  4  4
3  5  5

Ответ 2

Вам вообще не нужна функция. Вы можете работать с целым столбцом напрямую.

Пример данных:

>>> df = pd.DataFrame({'a': [100, 1000], 'b': [200, 2000], 'c': [300, 3000]})
>>> df

      a     b     c
0   100   200   300
1  1000  2000  3000

Половина всех значений в столбце a:

>>> df.a = df.a / 2
>>> df

     a     b     c
0   50   200   300
1  500  2000  3000

Ответ 3

Для одного столбца лучше использовать map(), например:

df = pd.DataFrame([{'a': 15, 'b': 15, 'c': 5}, {'a': 20, 'b': 10, 'c': 7}, {'a': 25, 'b': 30, 'c': 9}])

    a   b  c
0  15  15  5
1  20  10  7
2  25  30  9



df['a'] = df['a'].map(lambda a: a / 2.)

      a   b  c
0   7.5  15  5
1  10.0  10  7
2  12.5  30  9

Ответ 4

Хотя данные ответы являются правильными, они изменяют начальный фрейм данных, что не всегда желательно (и, учитывая, что OP попросил привести примеры "с использованием apply ", возможно, им нужна версия, которая возвращает новый фрейм данных, так как apply делает).

Это возможно с помощью команды assign: это допустимо для assign существующим столбцам, так как документация гласит (выделено мое):

Назначьте новые столбцы в DataFrame.

Возвращает новый объект со всеми исходными столбцами в дополнение к новым. Существующие столбцы, которые будут переназначены, будут перезаписаны.

Короче:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame([{'a': 15, 'b': 15, 'c': 5}, {'a': 20, 'b': 10, 'c': 7}, {'a': 25, 'b': 30, 'c': 9}])

In [3]: df.assign(a=lambda df: df.a / 2)
Out[3]: 
      a   b  c
0   7.5  15  5
1  10.0  10  7
2  12.5  30  9

In [4]: df
Out[4]: 
    a   b  c
0  15  15  5
1  20  10  7
2  25  30  9