web-dev-qa-db-ja.com

他の列の値を追加して、Pandaデータフレームに新しい列を作成します

私は次のような値を持つデータフレームを持っています

A B
1 4
2 6
3 9

列Aと列Bの値を追加して、新しい列を追加する必要があります。

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

ラムダ関数を使用してこれを実行できると考えていますが、その方法はわかりません。

37
n00b

非常にシンプル:

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

最も簡単な方法は、DeepSpace answerを使用することです。ただし、本当に匿名関数を使用する場合は、applyを使用できます。

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

@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
24

アントンの答えをもう少し構築して、次のようにすべての列を追加できます。

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

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
steveb

できること:

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

数値のみを実行する場合:

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

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
1
Roushan

N00bが取得しているエラーメッセージに応答するコメントを追加したかったのですが、評判が十分ではありません。だから私のコメントは、それが誰にも役立つ場合の答えです...

n00b言った:

次の警告が表示されます。DataFrameのスライスのコピーに値を設定しようとしています。代わりに.loc [row_indexer、col_indexer] = valueを使用してみてください

df['C']を作成する前にデータフレームに対して行った操作が、データフレームのコピーではなくデータフレームへのビューを作成したため、このエラーが発生しました。エラーは、DeepSpaceによって提案された単純な計算df['C'] = df['A'] + df['B']からは発生しませんでした。

ビューとコピーを返す ドキュメントをご覧ください。

1
tgraybam

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)が使用される場合も同じです。

0
firefly