У меня есть кадр данных pandas с двумя столбцами. Мне нужно изменить значения первого столбца, не влияя на второй, и вернуть весь кадр данных с измененными только значениями первого столбца. Как я могу это сделать, применяя в pandas?
Pandas: Как я могу использовать функцию apply() для одного столбца?
Ответ 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