2015-02-04 3 views
1

Как я могу создать больше столбцов в фреймворке данных, используя применить больше столбцов? Мой ФР:Pandon pandas применяются к большему количеству столбцов

A B C 
0 11 21 31 
1 12 22 31 

Если я хочу, чтобы создать только один столбец, который работает отлично:

df['new_1']=df[['A','C','B']].apply(lambda x: x[1]/2, axis=1) 

Результат является:

A B C new_1 
0 11 21 31 15.5 
1 12 22 32 16.0 

Но что, если я хочу, чтобы произвести больше чем один столбец? Это отлично работает:

df[['new_1','new_2']]=df[['A','C']].apply(lambda x: [x[1]/2,x[1]*2], axis=1) 

Результат:

A B C new_1 new_2 
0 11 21 31 15.5  62 
1 12 22 32 16.0  64 

Но что, если я хочу использовать более двух столбцов в заявку?

df[['new_1','new_2']]=df[['A','B','C']].apply(lambda x: [x[1]/2,x[2]*2], axis=1) 

Я получаю эту ошибку:

KeyError: "['new_1' 'new_2'] not in index" 

Любая помощь? Я использую Python 2.7 и pandas 0.15.2

Спасибо!

ответ

1

Использование конструктора серии в пределах обычно применяются делает трюк:

In [11]: df[['new_1','new_2']] = df[['A','B','C']].apply(lambda x: pd.Series([x[1]/2,x[2]*2]), axis=1) 

In [12]: df 
Out[12]: 
    A B C new_1 new_2 
0 11 21 31  10  62 
1 12 22 31  11  62 

я вижу другую ошибку без него (до назначения):

In [21]: df[['A','B','C']].apply(lambda x: [x[1]/2,x[2]*2], axis=1) 
ValueError: Shape of passed values is (2, 2), indices imply (2, 3) 
+0

Спасибо, это работает отлично !!! – ragesz

+0

А что, если я хочу вернуться с разными типами элементов? pd.Series ([str (x [1]/2), x [2] * 2]) возвращается с ошибкой :( – ragesz

+0

@ragesz, который работает для меня с приведенным выше примером, какая версия панд, какая ошибка? (Возможно стоит вопрос о новом вопросе) –