Ответ 1
Очень просто:
df['C'] = df['A'] + df['B']
У меня есть фреймворк с такими значениями, как
A B
1 4
2 6
3 9
Мне нужно добавить новый столбец, добавив значения из столбцов A и B, например
A B C
1 4 5
2 6 8
3 9 12
Я считаю, что это можно сделать с помощью лямбда-функции, но я не могу понять, как это сделать.
Очень просто:
df['C'] = df['A'] + df['B']
Самый простой способ - использовать ответ DeepSpace. Однако, если вы действительно хотите использовать анонимную функцию, которую вы можете использовать, используйте:
df['C'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
Вы можете использовать функцию 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
Построив немного больше ответа Антона, вы можете добавить все столбцы следующим образом:
df['sum'] = df[list(df.columns)].sum(axis=1)
По версии 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
Вы могли бы сделать:
df['C'] = df.sum(axis=1)
Если вы хотите использовать только числовые значения:
df['C'] = df.sum(axis=1, numeric_only=True)
Я хотел добавить комментарий в ответ на сообщение об ошибке n00b, но у меня недостаточно репутации. Так что мой комментарий - это ответ, если он кому-нибудь поможет...
N00B сказал:
Я получаю следующее предупреждение: пытаюсь установить значение для копии среза из DataFrame. Попробуйте вместо этого использовать .loc [row_indexer, col_indexer] = значение
Он получил эту ошибку, потому что любые манипуляции, которые он делал со своим фреймом данных до создания df['C']
создавали представление в фрейме данных, а не его копию. Ошибка не возникла из простого вычисления df['C'] = df['A'] + df['B']
предложенного DeepSpace.
Взгляните на Возврат вида или копии документа.
Можно сделать с помощью 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
По поводу комментария 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).