Создайте новый столбец в Panda dataframe, добавив значения из других столбцов

У меня есть фреймворк с такими значениями, как

A B
1 4
2 6
3 9

Мне нужно добавить новый столбец, добавив значения из столбцов A и B, например

A B C
1 4 5
2 6 8
3 9 12

Я считаю, что это можно сделать с помощью лямбда-функции, но я не могу понять, как это сделать.

Ответ 1

Очень просто:

df['C'] = df['A'] + df['B']

Ответ 2

Самый простой способ - использовать ответ DeepSpace. Однако, если вы действительно хотите использовать анонимную функцию, которую вы можете использовать, используйте:

df['C'] = df.apply(lambda row: row['A'] + row['B'], axis=1)

Ответ 3

Вы можете использовать функцию sum для достижения этого как @EdChum, упомянутого в комментарии:

df['C'] =  df[['A', 'B']].sum(axis=1)

In [245]: df
Out[245]: 
   A  B   C
0  1  4   5
1  2  6   8
2  3  9  12

Ответ 4

Построив немного больше ответа Антона, вы можете добавить все столбцы следующим образом:

df['sum'] = df[list(df.columns)].sum(axis=1)

Ответ 5

По версии Pandas версии 0.16.0 вы можете использовать assign следующим образом:

df = pd.DataFrame({"A": [1,2,3], "B": [4,6,9]})
df.assign(C = df.A + df.B)

# Out[383]: 
#    A  B   C
# 0  1  4   5
# 1  2  6   8
# 2  3  9  12

Вы можете добавить несколько столбцов следующим образом:

df.assign(C = df.A + df.B,
          Diff = df.B - df.A,
          Mult = df.A * df.B)
# Out[379]: 
#    A  B   C  Diff  Mult
# 0  1  4   5     3     4
# 1  2  6   8     4    12
# 2  3  9  12     6    27

Ответ 6

Вы могли бы сделать:

df['C'] = df.sum(axis=1)

Если вы хотите использовать только числовые значения:

df['C'] = df.sum(axis=1, numeric_only=True)

Ответ 7

Я хотел добавить комментарий в ответ на сообщение об ошибке n00b, но у меня недостаточно репутации. Так что мой комментарий - это ответ, если он кому-нибудь поможет...

N00B сказал:

Я получаю следующее предупреждение: пытаюсь установить значение для копии среза из DataFrame. Попробуйте вместо этого использовать .loc [row_indexer, col_indexer] = значение

Он получил эту ошибку, потому что любые манипуляции, которые он делал со своим фреймом данных до создания df['C'] создавали представление в фрейме данных, а не его копию. Ошибка не возникла из простого вычисления df['C'] = df['A'] + df['B'] предложенного DeepSpace.

Взгляните на Возврат вида или копии документа.

Ответ 8

Можно сделать с помощью loc

In [37]:  df = pd.DataFrame({"A":[1,2,3],"B":[4,6,9]})

In [38]: df
Out[38]:
   A  B
0  1  4
1  2  6
2  3  9

In [39]: df['C']=df.loc[:,['A','B']].sum(axis=1)

In [40]: df
Out[40]:
   A  B   C
0  1  4   5
1  2  6   8
2  3  9  12

Ответ 9

По поводу комментария n00b: "Я получаю следующее предупреждение: пытаюсь установить значение для копии среза из DataFrame. Попробуйте вместо этого использовать .loc [row_indexer, col_indexer] = value"

Я получаю ту же ошибку. В моем случае это было из-за того, что я пытался выполнить добавление столбца на фрейме данных, который был создан следующим образом:

df_b = df[['colA', 'colB', 'colC']]

вместо:

df_c = pd.DataFrame(df, columns=['colA', 'colB', 'colC'])

df_b - это копия фрагмента из df
df_c - новый фрейм данных Так

df_c['colD'] = df['colA'] + df['colB']+ df['colC']

добавит столбцы и не будет выдавать никаких предупреждений. То же самое, если используется .sum(axis = 1).