読者です 読者をやめる 読者になる 読者になる

DPCデータの分析とかやるブログ

DPCデータの分析なんかをテキトーにやってます。

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は便利ですね。