2016-01-23 3 views
55

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

+3

Пожалуйста создавать некоторые входные данные выборки и желаемый выход. –

+0

Вы почти никогда не должны использовать 'apply' в такой ситуации. Вместо этого используйте столбец. –

ответ

107

Учитывая образец dataframe 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 
+0

'apply' никогда не должен использоваться в такой ситуации –

+1

@TedPetrou, что вы совершенно правы, это был просто пример того, как применить общую функцию в одном столбце, как задал OP. –

7

Для одного столбца лучше использовать 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 
+24

Почему 'map()' лучше, чем 'apply()' для одного столбца? – ChaimG

+2

Я думаю, что это должно быть 'lambda a: a/2.' вместо этого. –

17

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

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

>>> 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 
Смежные вопросы