DataFrameの列にSeriesのオブジェクトを代入すると、一括で列の要素を更新できます。ただし、このとき注意事項があります。それは、「Seriesの行名と同じDataFrameの行名が対応づけられて、データが代入される」ということです。
具体的な例で見てみましょう。以下のDataFrameの変数df
があったとします。
Name | Age | |
---|---|---|
10 | Alice | 17 |
20 | Bob | 24 |
下記のように、列Age
にリストを代入すると、df.Age
は「25、18」になります。代入したリスト内の要素の順番と、代入後のdf.Age
の要素の順番が同じことがわかります。
df.Age = [25, 18]
df
Name | Age | |
---|---|---|
10 | Alice | 25 |
20 | Bob | 18 |
しかし、下記のようにSeriesを代入すると、df.Age
は「18、25」のように逆になります。これは、要素の順番ではなく、行名に紐づいて代入されるからです。
sr = pd.Series([25, 18], index=[20, 10])
df.Age = sr
df
Name | Age | |
---|---|---|
10 | Alice | 18 |
20 | Bob | 25 |
下図は、上のコードのdf.Age = sr
を図示したものです。df.Age[10]
にはsr[10]
が、df.Age[20]
にはsr[20]
が代入されます。
このように、DataFrameの列にSeriesを代入するときは、(行名の集合としての)インデックスが考慮されて代入されます。
コメント