[1行で実現]DataFrameで同じ値をまとめる[pandas]

スポンサードリンク
アイキャッチ Python
過去の自分
過去の自分

「チーム名」と「点数」が書かれたエクセルファイルがあるんだけど、
どのチームが合計何点取ったかまとめたい…。

今の自分
今の自分

なるほど…。
では今回は、pandasのDataFrameで
「同じ値をまとめる方法」について
できるだけわかりやすく解説いたします!
また、同じ値をまとめる際の注意点も紹介いたしますので、
ぜひ最後まで読んでいってください。

【著者情報】
Python歴3年。
入社2年目の春に先輩が突然トンズラし、業務を半分肩代わりするハメに…。
今までの1.5倍の仕事をこなせるはずもなく、苦しむ毎日。
業務効率化を模索中にPythonと出合う。
業務とPythonの相性が良く、2倍以上の効率化を実現。現在も効率化を進行中。

スポンサードリンク

同じ値をまとめるには[pandas]

同じ値をまとめるには「groupby」を使います。まずは実行見本をどうぞ。

実行見本

全コード

ひとまず全コードを網羅します。解説は後ほど行います。

import pandas as pd

df = pd.read_excel('input.xlsx')

df = df.groupby('チーム名')['点数'].sum()

df.to_csv('output.csv', encoding='shift-jis')
df = df.groupby('チーム名')['点数'].sum()

事前準備

  • pandasのインストール

「DataFrame」を作成・編集するには、「pandas」が必要になります。

pandasのインストール方法

pandasを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。

pip install pandas

※pandasを使用したことがある場合は、このインストール作業は不要です。

インストールができない場合の対処法などは下記記事をご参考ください。

DataFrameの基礎解説

「read_excel」などは下記記事で解説しております。ご参考ください。

解説

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

df = df.groupby('チーム名')['点数'].sum()

上記一文にて、指定列の同じ値をまとめることができます。

「groupby」の()内には、「まとめる列(重複がある列)」の名前を指定します。
後ろの[]内には、「値を合算する列」の名前を記述してください。

<テンプレ>
【 データフレーム = データフレーム.groupby(‘まとめる列名‘)[‘値を合算する列名‘].sum()


順番を並び替えたい場合は下記記事をご参考ください。


今回はわかりやすいように点数を全て1点にしましたが、2点や3点が混じっていても大丈夫です。

同じ値をまとめる際の注意点

上図は出力後のデータですが、一番左の列は「index」にあたります。
DataFrame内のデータではありませんのでご注意ください。

何に注意すべきかと言いますと、出力時に「index = None」を記述すると消えてしまいます。
「index = None」は書かないようにお願いします。

スポンサードリンク

うまく動作しない時

エラーが出る

No such file or directory: ○○

これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。

詳しい解説は、下記記事をご参考ください。

○○ is not defined

今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。

詳しい解説は、下記記事をご参考ください。

その他のエラー

その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。

スポンサードリンク

まとめ

pandasのDataFrameでバラバラに存在する同じ値をまとめる方法を解説いたしました。

支店ごとに売り上げをまとめたい場合や、サイトごとにアクセス数をまとめたい場合に便利ですので、
ぜひご活用ください。

当ブログでは、Python(pandasやopenpyxl)に関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

挫折せずにPythonを独学で学習する方法は特におすすめです。

最後までお読みいただき、ありがとうございました。がんばってください!

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