pandasで2018年の投手貢献度を計算

qiita.com

pandasで計算

import pandas as pd

url = 'https://baseball-data.com/stats/pitcher-all/era-1.html'
dfs = pd.read_html(url, index_col=0)

league = pd.DataFrame({
    'チーム': [
        '広島', '阪神', 'DeNA', '巨人', '中日', 'ヤクルト', 'ソフトバンク', '西武', '楽天', 'オリックス',
        '日本ハム', 'ロッテ'
    ],
    'リーグ': [
        'セントラル', 'セントラル', 'セントラル', 'セントラル', 'セントラル', 'セントラル', 'パシフィック',
        'パシフィック', 'パシフィック', 'パシフィック', 'パシフィック', 'パシフィック'
    ]
})
league

df = pd.merge(dfs[0], league, on='チーム')
df

# 列名を置換
df.rename(
    columns={
        'セlブ': 'セーブ',
        'ホlルド': 'ホールド'
    }, inplace=True)
df

# 小松式ドネーション計算
df['KD'] = ((df['投球回'] * 3) + (df['勝利'] + df['セーブ'] + df['ホールド']) * 10) * 1000

# セ・リーグ抽出
se_league = df[df['リーグ'] == 'セントラル'].copy()

# パ・リーグ抽出
pa_league = df[df['リーグ'] == 'パシフィック'].copy()

# チーム別集計
pv = df.pivot_table(values='KD', index='チーム', aggfunc=sum, fill_value=0)
pv['順位'] = pv['KD'].rank(ascending=False, method='min')
pv.sort_values('順位', inplace=True)

team_rank = pv.reset_index().set_index('順位')
team_rank

# ランキング
df['順位'] = df['KD'].rank(ascending=False, method='min')
df.sort_values('順位', inplace=True)
df.set_index('順位', inplace=True)
df[df.index < 21]

# セ・リーグ
se_league['順位'] = se_league['KD'].rank(ascending=False, method='min')
se_league.sort_values('順位', inplace=True)
se_league.set_index('順位', inplace=True)
se_league[se_league.index < 11]

# パ・リーグ
pa_league['順位'] = pa_league['KD'].rank(ascending=False, method='min')
pa_league.sort_values('順位', inplace=True)
pa_league.set_index('順位', inplace=True)
pa_league[pa_league.index < 11]