データサイエンス100本ノック関連記事リスト
【001 全項目を指定行数抽出する】 Python in Excelで始めるデータサイエンス100本ノック!
【002 特定の列を抽出する】 Python in Excelで始めるデータサイエンス100本ノック!
【003 指定列の列名を変更する】 Python in Excelで始めるデータサイエンス100本ノック!
【004 特定条件に合致する行を抽出(=、>、<)】 Python in Excelで始めるデータサイエンス100本ノック!
【005 複数条件に合致する行を抽出する①】 Python in Excelで始めるデータサイエンス100本ノック!
【006 複数条件に合致する行を抽出する②】 Python in Excelで始めるデータサイエンス100本ノック!
【007 複数条件に合致する行を抽出する③】 Python in Excelで始めるデータサイエンス100本ノック!
【008 特定条件に合致しない行を抽出する(!=)】 Python in Excelで始めるデータサイエンス100本ノック!
1️⃣ はじめに
- この連載企画では、データサイエンス100本ノックをPython in Excelで実行する方法を比較しながらご紹介しています。📖Python in Excelとは?
Python in Excelは、Excel上で直接Pythonのコードを実行できる話題の新機能です。
- 2023年8月に、パブリックプレビュー版が発表されました。
- 現在は、Microsoftの一定のバージョン以降でMicrosoft 365 insidersプログラムに参加し「Beta Channel」を選択することで利用が可能です。
- Python in Excelでは、ExcelにPython実行環境である「Anaconda」が組み込まれています。
- 新しい関数である「PY」関数を使って、セルにPythonプログラムを書き込むと、クラウドでPythonプログラムを実行することができます。
- Python向けの各種ライブラリとして、Pandas や Matplotlib、seaborn を使えば、データの整形やグラフ化ができたり、scikit-learn を使用すれば機械学習やデータからの予測などの機能を利用できます。
- それでは早速、演習問題007 複数条件に合致する行を抽出する③にチャレンジしてみましょう!
2️⃣ データサイエンス100本ノックの紹介
- データサイエンス100本ノックは、実践的でワクワクするような課題に取り組みながら、プログラミング、データ分析のスキルを楽しく習得することを目指した、データサイエンス初学者のための問題集です。📖「データサイエンス100本ノック(構造化データ加工編)」とは具体的に?
データサイエンス初学者を対象に、データの加工・集計、統計学や機械学習を駆使したモデリングの前処理等を学べるように、データと実行環境構築スクリプト、演習問題がワンセットになったコンテンツのことです。「データサイエンス100本ノック(構造化データ加工編)」 概要
- アクセス:GitHub(無料公開)
- 実行環境のサポート言語:SQL、Python、R
- 演習問題:各言語の設問100問
- 解答例:各設問に対する解答例のファイルを用意
3️⃣ Excelのワークシート関数で実行
- レシート明細のCSVデータをExcelで開いています。
- データのダウンロードの方法はこちらの動画をご覧ください。
- まず、Excelのワークシート関数を使って実行していきます。
- レシート明細データ(
df_receipt
)から売上年月日(sales_ymd
)、顧客ID(customer_id
)、商品コード(product_cd
)、売上金額(amount
)の順に列を指定し、以下の全ての条件を満たすデータを抽出せよ。- 顧客ID(
customer_id
)が"CS018205000001"
- 売上金額(
amount
)が1,000以上2000以下
- 顧客ID(

- 条件式を考える場合はベン図で考えると分かりやすいです。
- このような「AかつB」の論理演算を論理積といいます。
- 論理積については以前の動画でもご説明いたしましたのでご確認ください。
- まずはFILTER関数を使用して条件に該当する行を抽出します。FILTER関数とは?
FILTER関数は指定した条件に合致するデータを抽出し、結果を表形式で表示する関数です。スピルの機能により、抽出結果が複数のセルに展開されます。
- FILTER関数でand条件を使う場合は「
*
」を使用します。 - 条件に該当する行を抽出できました。
=FILTER(A:I,(F:F="CS018205000001")*((I:I>=1000)*(I:I<=2000)))
- 次にVSTACK関数でヘッダーとデータを結合します。VSTACK関数とは?
VSTACK関数は複数の配列を垂直方向に繋げる関数で、ヘッダー行とデータ行を結合させることが可能です。
- A1:I1はヘッダー行、FILTER関数の部分はデータ行を指定しています。
- 条件に該当するヘッダー行とデータ行を抽出できました。
=VSTACK(A1:I1,FILTER(A:I,(F:F="CS018205000001")*((I:I>=1000)*(I:I<=2000))))
- 最後に、該当の列のみに絞り込みを行うためCHOOSECOLS関数を使用します。CHOOSECOLS関数とは?
CHOOSECOLS関数は、配列やデータ範囲から特定の列を抽出するためのExcel関数です。抽出したい列番号を引数に指定して使用します。
- CHOOSECOLS関数を使って「1,6,7,9」の列を指定して抽出することができました。
=CHOOSECOLS(VSTACK(A1:I1,FILTER(A:I,(F:F="CS018205000001")*((I:I>=1000)*(I:I<=2000)))),1,6,7,9)
【補足】
- FILTER関数の条件式で動画内では以下のように記述しました。
(F:F="CS018205000001")*((I:I>=1000)*(I:I<=2000))
- 論理演算では、掛け算「
*
」は「かつ(AND)」の意味を持ちます。 - 掛け算は順番に関係なく、すべての条件が真である必要があります。
- 括弧は計算の優先順位を明確にするために使用されますが、この場合はすべての条件を「かつ」で結合しているため、括弧の有無は結果に影響しません。
そのため以下のように記述することが可能です。
(F:F="CS018205000001")*(I:I>=1000)*(I:I<=2000)
最終的な数式は以下のように記述できます。
=CHOOSECOLS(VSTACK(A1:I1,FILTER(A:I,(F:F="CS018205000001")*(I:I>=1000)*(I:I<=2000))),1,6,7,9)
- 論理演算では、掛け算「
指定した条件でデータを絞り込み表示することができました。
次はPython in Excelで確認します。
4️⃣ Python in Excelで実行
- レシート明細のCSVデータをExcelで開いています。
- 数式タブからPythonの挿入を選択します。
- Python in Excelを使って
DataFrame
にデータを格納するにはセル範囲を選択します。列を指定するか、または表のセル範囲を指定します。
- 指定した範囲を
df_receipt
という変数に格納します。df_receipt = xl("A:I", headers=True)
df_receipt
に対してリストで表示したい列名を入力します。df_receipt = xl("A:I", headers=True) df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]
Ctrl + Enter
で実行します。- 表示が
DataFrame
に変わりましたら、数式バー隣のプルダウンメニューをクリック、PythonオブジェクトからExcelの値に変更します。 - 指定した列が抽出されました。
- 抽出された
DataFrame
をdf
という変数に格納します。df_receipt = xl("A:I", headers=True) df = df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']]
- 続いて、
Pandas
の場合、データフレームの項目に対し、比較演算子による条件指定を行うことで、True/False
の配列を生成することができます。 - 論理積を記述する際は
&
(アンパサンド)で条件式をつなげます。df_receipt = xl("A:I", headers=True) df = df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] (df['customer_id'] == 'CS018205000001') & (df['amount'] >= 1000) & (df['amount'] <= 2000)
- 「顧客ID(
customer_id
)が"CS018205000001"
」 - 「そして、売上金額(
amount
)が1,000以上2000以下」を指定します。Ctrl + Enter
で実行します。
- 条件に該当する行が
True
となり、それ以外の行はFalse
になりました。 - そして、データフレームの
df
の中でこの条件式を書くことで、True
の項目でデータを絞り込むことができます。df_receipt = xl("A:I", headers=True) df = df_receipt[['sales_ymd', 'customer_id', 'product_cd', 'amount']] df[(df['customer_id'] == 'CS018205000001') & (df['amount'] >= 1000) & (df['amount'] <= 2000)]
Ctrl + Enter
で実行します。 - 条件で絞り込みしたデータが出力されました。
条件で絞り込みしたデータが出力されました。
以上で、データサイエンス100本ノック演習問題007 複数条件に合致する行を抽出する③をクリアしました。
5️⃣ おわりに
- 最後までお読みいただきありがとうございます!
- この記事へのご質問やアドバイスがありましたら、ぜひコメントもお待ちしております。
- またXでもVBA、Pythonに関するアウトプットをしていますので、🔽フォローいただけますと幸いです😆