私は次のような値を持つデータフレームを持っています
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 answerを使用することです。ただし、本当に匿名関数を使用する場合は、applyを使用できます。
df['C'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
@EdChumがコメントで言及したように、sum
関数を使用してそれを実現できます。
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)
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が取得しているエラーメッセージに応答するコメントを追加したかったのですが、評判が十分ではありません。だから私のコメントは、それが誰にも役立つ場合の答えです...
n00b言った:
次の警告が表示されます。DataFrameのスライスのコピーに値を設定しようとしています。代わりに.loc [row_indexer、col_indexer] = valueを使用してみてください
df['C']
を作成する前にデータフレームに対して行った操作が、データフレームのコピーではなくデータフレームへのビューを作成したため、このエラーが発生しました。エラーは、DeepSpaceによって提案された単純な計算df['C'] = df['A'] + df['B']
からは発生しませんでした。
ビューとコピーを返す ドキュメントをご覧ください。
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)が使用される場合も同じです。