DataFrameの列へのSeriesの代入

DataFrameの列にSeriesのオブジェクトを代入すると、一括で列の要素を更新できます。ただし、このとき注意事項があります。それは、「Seriesの行名と同じDataFrameの行名が対応づけられて、データが代入される」ということです。

具体的な例で見てみましょう。以下のDataFrameの変数dfがあったとします。

NameAge
10Alice17
20Bob24

下記のように、列Ageにリストを代入すると、df.Ageは「25、18」になります。代入したリスト内の要素の順番と、代入後のdf.Ageの要素の順番が同じことがわかります。

df.Age = [25, 18]
df
NameAge
10Alice25
20Bob18

しかし、下記のようにSeriesを代入すると、df.Ageは「18、25」のように逆になります。これは、要素の順番ではなく、行名に紐づいて代入されるからです。

sr = pd.Series([25, 18], index=[20, 10])
df.Age = sr
df
NameAge
10Alice18
20Bob25

下図は、上のコードのdf.Age = srを図示したものです。df.Age[10]にはsr[10]が、df.Age[20]にはsr[20]が代入されます。

https://images.pyq.jp/repo/prod/pandas_structure_series_v2/pandas_structure_series_01.jpg

このように、DataFrameの列にSeriesを代入するときは、(行名の集合としての)インデックスが考慮されて代入されます。

コメント

タイトルとURLをコピーしました