Pythonで条件に基づいてPandasデータフレームに新しい列を作成する方法
Pythonプログラムにおいて、Pandasはデータフレームを作成してデータを処理します。本記事では、既存のデータフレームに対して、特定の条件に基づいて新しい列を追加する方法を解説します。
元となるデータフレーム
以下は、今回新しい列を追加していくPandasのデータフレームです。試験の曜日と科目を表すシンプルなデータとなっています。
サンプルコード
import pandas as pd
# 試験科目と曜日のリスト
Days = ['Mon', 'Tue', 'Wed','Thu', 'Fri']
Sub = ['Chemisry','Physics','Maths','English','Biology']
# 試験スケジュールの辞書
Exam_Subjects = {'Exam Day': Days,
'Exam Subject': Sub}
# 辞書からデータフレームへ変換
Exam_Subjects_df = pd.DataFrame(Exam_Subjects)
print(Exam_Subjects_df)
実行結果
上記のコードを実行すると、次のような出力が得られます。
Exam Day Exam Subject 0 Mon Chemisry 1 Tue Physics 2 Wed Maths 3 Thu English 4 Fri Biology
条件に基づいて新しい列を追加する
続いて、試験の時刻を示す新しい列を追加してみましょう。ここではif文を使った条件分岐を活用し、「Time」という名前の追加列を作成します。
具体的には、リスト内包表記の中で条件式を記述し、Exam Day(試験日)の値が「Mon」または「Thu」であれば「2 PM」を、それ以外の場合は「10 AM」を設定しています。このように、既存の列の値を参照しながら条件判定を行うことで、柔軟に新しい列を生成できます。
サンプルコード
import pandas as pd
# 試験科目と曜日のリスト
Days = ['Mon', 'Tue', 'Wed','Thu', 'Fri']
Sub = ['Chemisry','Physics','Maths','English','Biology']
# 試験スケジュールの辞書
Exam_Subjects = {'Exam Day': Days,
'Exam Subject': Sub}
# 辞書からデータフレームへ変換
Exam_Subjects_df = pd.DataFrame(Exam_Subjects)
# 条件に基づいてTime列を追加
Exam_Subjects_df['Time'] = ['2 PM' if x in('Mon','Thu') else '10 AM' for x in Exam_Subjects_df['Exam Day']]
print(Exam_Subjects_df)
実行結果
上記のコードを実行すると、次のような出力が得られます。
Exam Day Exam Subject Time 0 Mon Chemisry 2 PM 1 Tue Physics 10 AM 2 Wed Maths 10 AM 3 Thu English 2 PM 4 Fri Biology 10 AM
まとめ
このように、リスト内包表記とif文を組み合わせることで、既存の列の値に応じた条件分岐を行い、データフレームに新しい列を簡単に追加できます。より複雑な条件や大量のデータを扱う場合には、NumPyのnp.where()関数やdf.apply()メソッド、あるいはnp.select()を使った複数条件の分岐なども便利なので、用途に応じて使い分けるとよいでしょう。
-
Pandasで既存のDataFrameに新しい列を追加する3つの方法
はじめにこのチュートリアルでは、Pythonのデータ分析ライブラリ「pandas」において、既存のDataFrameに新しい列を追加する方法を解説します。新しい列を追加するアプローチは複数あり、それぞれに特徴があります。ここでは代表的な3つの方法を、コード例と実行結果とともに順番に見ていきましょう。方法1:リストを使って追加する最もシンプルなのが、Pythonのリストをそのまま列として代入する方法です。以下の手順で行います。手順辞書を使ってDataFrameを作成する。新しい列のデータを含むリストを作成する。リストの長さが、すでにDataFrame内にあるデータの行数と一致している必要がある点
-
【Python】PandasのDataFrameで列の文字列を大文字に変換する方法
このチュートリアルでは、PandasのDataFrame(データフレーム)内の特定の列(例えば名前の列)をすべて大文字に変換する方法を解説します。主な方法は2つあり、それぞれコード例と実行結果とともに紹介します。方法1:str.upper() を使う方法Pandasでは、文字列型(object型)の列に対して .str アクセサを使うことで、Python標準の文字列メソッドを各要素に一括適用できます。大文字への変換には str.upper() を使用します。コード例# pandasパッケージをインポート import pandas as pd # DataFrame用のデータ data =