前提・実現したいこと
Python初心者です。特定の.xlsxファイルや.csvファイルを用いてpandasよりデータ分析を行っております。
”Player”列やそのPlayerの各分野の成績などが一行に並んだ.xlsxファイルを大元に分析を行っております(1Playerは1行のみではなく、日付ごとに複数の行をランダムに持っています)。
Playerごとに各カラムにおけるcount値やmean値やmax値などデフォルトで計算できるものを計算させ、Playerでグルーピングしたものを成績表として別のxlsxに書き出します。
percentile値や指定範囲の割合に関しては、関数を定義して使用しています。
出力する値はagg()でまとめて書き出す仕様になっております。
現状では全カラムに対してaggで指定したものが出てきてしまっていますが、countはPlayerの右隣に一行のみ、percentile値はSpeedの最左端のみに挿入したいです。
また、Angleに関してはそのPlayerの全体の数に対して4~16である割合を関数を作成しaggに入れております。これに関してもAngle列の右端にのみ挿入したいと考えております。
拙い説明でございますが、どのように行うのが良いでしょうか?
ご教授の程、よろしくお願い致します。
発生している問題・エラーメッセージ
該当のソースコード
Python
1import pandas as pd 2import numpy as np 3import openpyxl as px 4pd.options.display.float_format="{:.1f}".format 5df = pd.read_excel("sample.xlsx") 6df = df[["Date","Player","Speed","Angle","Efficiency"]] 7 8def percentile(n): 9 def percentile_(x): 10 return np.percentile(x, n) 11 percentile_.__name__ = '%sth' % n 12 return percentile_ 13 14def AA416(angle): 15 return 100*angle[(angle>=4.0)&(angle<16.0)].count()/angle.count() 16 17dfx = df.groupby("Player").agg(["count",np.mean,max,np.std,percentile(50),percentile(90),AA416])
試したこと
初心者の極みでございますので、色々と調べながらここまで書けてやっとという感覚です...。
そもそもagg()で指定してしまうと、やはり全カラムに適用されてしまうので複数回に分けて書き出す+書き出したものを結合させる、のが一つの方法なのかなとは思っておりました。
Angleに関しては当初はその考えで、別ファイルで書き出していましたがやはり結合させるのに手間があるなと感じたため質問致しました。
補足情報(FW/ツールのバージョンなど)
vscode、python3.9.4
回答1件
あなたの回答
tips
プレビュー