Add column with constant value to pandas dataframe [duplicate] Ask Question

Add column with constant value to pandas dataframe [duplicate] Ask Question

DataFrame が与えられた場合:

np.random.seed(0)
df = pd.DataFrame(np.random.randn(3, 3), columns=list('ABC'), index=[1, 2, 3])
df

          A         B         C
1  1.764052  0.400157  0.978738
2  2.240893  1.867558 -0.977278
3  0.950088 -0.151357 -0.103219

定数値 (例: 0) を含む新しい列を追加する最も簡単な方法は何ですか?

          A         B         C  new
1  1.764052  0.400157  0.978738    0
2  2.240893  1.867558 -0.977278    0
3  0.950088 -0.151357 -0.103219    0

これが私の解決策ですが、なぜ NaN が「新しい」列に入れられるのかわかりません。

df['new'] = pd.Series([0 for x in range(len(df.index))])

          A         B         C  new
1  1.764052  0.400157  0.978738  0.0
2  2.240893  1.867558 -0.977278  0.0
3  0.950088 -0.151357 -0.103219  NaN

ベストアンサー1

非常にシンプルなインプレース代入:df['new'] = 0

インプレース変更の場合は、直接割り当てを実行します。この割り当ては、各行に対して pandas によってブロードキャストされます。

df = pd.DataFrame('x', index=range(4), columns=list('ABC'))
df

   A  B  C
0  x  x  x
1  x  x  x
2  x  x  x
3  x  x  x

df['new'] = 'y'
# Same as,
# df.loc[:, 'new'] = 'y'
df

   A  B  C new
0  x  x  x   y
1  x  x  x   y
2  x  x  x   y
3  x  x  x   y

オブジェクト列に関する注意

空のリストの列を追加したい場合は、次のアドバイスを参考にしてください。

  • これを行わないことを検討してください。object列はパフォーマンスの面で悪影響を及ぼします。データの構造を再考してください。
  • データをスパース データ構造に保存することを検討してください。詳細情報:スパースデータ構造
  • リストの列を保存する必要がある場合は、同じ参照を複数回コピーしないようにしてください。

    # Wrong
    df['new'] = [[]] * len(df)
    # Right
    df['new'] = [[] for _ in range(len(df))]
    

コピーの生成:df.assign(new=0)

代わりにコピーが必要な場合は、DataFrame.assign:

df.assign(new='y')

   A  B  C new
0  x  x  x   y
1  x  x  x   y
2  x  x  x   y
3  x  x  x   y

そして、複数の列に同じ値を割り当てる必要がある場合は、次のように簡単です。

c = ['new1', 'new2', ...]
df.assign(**dict.fromkeys(c, 'y'))

   A  B  C new1 new2
0  x  x  x    y    y
1  x  x  x    y    y
2  x  x  x    y    y
3  x  x  x    y    y

複数列の割り当て

最後に、複数の列に異なる値を割り当てる必要がある場合は、assign辞書を使用できます。

c = {'new1': 'w', 'new2': 'y', 'new3': 'z'}
df.assign(**c)

   A  B  C new1 new2 new3
0  x  x  x    w    y    z
1  x  x  x    w    y    z
2  x  x  x    w    y    z
3  x  x  x    w    y    z

おすすめ記事