Pandasでささっと前年度比較
毎月レセプトが終わると、前年同月比較をやることが多いです。
まあ、手術がガクンと落ちたり上がったり、どうしても波があるからです。
今回は、EFからささっとデータを取ってくる方法を考えてみました。
わかりやすく、今年のデータはdf17
、去年のデータはdf16
としましょう。
df17 = pd.read_sql("""select 診療科区分,解釈番号,診療明細名称,出来高実績点数,行為回数 from etable17 Where データ区分 BETWEEN 50 AND 59 AND 解釈番号 LIKE 'K%' AND 解釈番号 NOT LIKE 'K92%'""",connection) df16 = pd.read_sql("""select 診療科区分,解釈番号,診療明細名称,出来高実績点数,行為回数 from etable16 Where データ区分 BETWEEN 50 AND 59 AND 解釈番号 LIKE 'K%' AND 解釈番号 NOT LIKE 'K92%'""",connection)
ひとまず手術手技だけに着目することにします。
解釈番号がKで始まるものに固定し、かつK92系(輸血です)を除いて、純粋に手術手技だけを見てみましょう。
df16['year'] = 16 df17['year'] = 17 df_merged = pd.concat([df16,df17])
あとで集計しやすいように、year
カラムを追加して年を入れます。
pd.concat
はデータフレームを縦方向に連結する関数です。SQLでいうところのUNIONですね。
df_merged.groupby(['診療科区分','year']).describe()
で診療科区分別の状態を、年別にサクッと確認できます。
また、
df_merged.sort_values(by='出来高実績点数', ascending=False)
とすれば、手技の高い順にソートをすることも出来ます。
また、メソッドは連結が可能です。
つまり、
df16.groupby(['診療科区分','診療明細名称']).sum().sort_values(by='出来高実績点数', ascending=False)
こうすれば、診療科区分・手技別に総計を出し、金額順に並び替える、という処理がワンライナーで出来ます。
こんな風に、その場その場の問題をぱぱっと解決するのにPandasは便利ですね。