実現したいこと
Python(Jupyter notebookを使っています)、Pandasでデータ集計をしています。
CSVで取り込んだデータのうち、カラム名の一部(先頭の2文字と、3つ目の_(アンダーバー)移行の文字)のみを抽出し、
それが共通する単位で値を合計したいです。
例では抽出する文字は、01_100m、01_1000m、02_100m、02_1000mで、それぞれ2列が共通になるため2列分の値は合計して表出するイメージです。
前提
カラム名のルールに例外はなく、先頭の数字は必ず2文字、_は3つあります。
発生している問題・エラーメッセージ
調べたコードを書いてみましたが、カラム名は先頭文字と_が連続する形で表出されてしまいます。
例 01___、01___、02___、02___
エラーメッセージは出ていません
該当のソースコード
Python
1import pandas as pd 2 3# DataFrameの作成(サンプル) 4data = read.csv(ファイル名) 5df = pd.DataFrame(data) 6 7# カラム名の最初の2文字と3つ目の_以降の文字列を抜き出してrename 8new_columns = {col: col[:2] + '_' + col.split('_', 2)[-1] if '_' in col else col for col in df.columns} 9df.rename(columns=new_columns, inplace=True) 10 11#カラム名が共通する列をグループ化し、各グループの合計を計算 12summary = df.groupby(df.columns).sum() 13summary
試したこと
renameする方法はいくつか試してみましたが、どれもうまくいきません。最後の5文字を抜く方法でもやってみましたが、できませんでした。
また、Stack関数で一度縦持ちにして処理することも検討しましたが、縦持ちにした際にカラム名が空になり、どの列に対する処理なのかを指定する部分がうまくいきませんでした。
最終的なgroupbyもこれだけで集計できるのかはわかりません。。
補足情報(FW/ツールのバージョンなど)
体系的な学習をしたことがなく、独学で調べながらpythonを使っています。
初歩的なところの理解が足りていない可能性がありますが、教えていただけましたら幸いです。
よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー