libs.utils.formatter
libs/utils/formatter.py
1""" 2libs/utils/formatter.py 3""" 4 5import os 6import random 7import re 8 9import pandas as pd 10 11import libs.global_value as g 12from libs.data import lookup 13from libs.utils import textutil 14 15 16def floatfmt_adjust(df: pd.DataFrame, index: bool = False) -> list: 17 """カラム名に応じたfloatfmtのリストを返す 18 19 Args: 20 df (pd.DataFrame): チェックするデータ 21 index (bool, optional): リストにIndexを含める. Defaults to False. 22 23 Returns: 24 list: floatfmtに指定するリスト 25 """ 26 27 fmt: list = [] 28 if df.empty: 29 return fmt 30 31 field: list = df.columns.tolist() 32 if index: 33 field.insert(0, df.index.name) 34 35 for x in field: 36 match x: 37 case "ゲーム数" | "game_count": 38 fmt.append(".0f") 39 case "win" | "lose" | "draw" | "top2" | "top3" | "gs_count": 40 fmt.append(".0f") 41 case "通算" | "通算ポイント" | "point_sum": 42 fmt.append("+.1f") 43 case "平均" | "平均ポイント" | "point_avg" | "区間ポイント" | "区間平均": 44 fmt.append("+.1f") 45 case "1st" | "2nd" | "3rd" | "4th" | "1位" | "2位" | "3位" | "4位" | "rank1" | "rank2" | "rank3" | "rank4": 46 fmt.append(".0f") 47 case "1st(%)" | "2nd(%)" | "3rd(%)" | "4th(%)" | "1位率" | "2位率" | "3位率" | "4位率": 48 fmt.append(".2f") 49 case "トビ" | "flying": 50 fmt.append(".0f") 51 case "トビ率": 52 fmt.append(".2f") 53 case "平均順位" | "平順" | "rank_avg": 54 fmt.append(".2f") 55 case "順位差" | "トップ差": 56 fmt.append(".1f") 57 case "レート": 58 fmt.append(".1f") 59 case "順位偏差" | "得点偏差": 60 fmt.append(".0f") 61 case "rpoint_max" | "rpoint_min" | "rpoint_mean": 62 fmt.append(".0f") 63 case _: 64 fmt.append("") 65 66 return fmt 67 68 69def column_alignment(df: pd.DataFrame, header: bool = False, index: bool = False) -> list: 70 """カラム位置 71 72 Args: 73 df (pd.DataFrame): チェックするデータ 74 header (bool, optional): ヘッダを対象にする 75 index (bool, optional): リストにIndexを含める. Defaults to False. 76 77 Returns: 78 list: colalignに指定するリスト 79 """ 80 81 fmt: list = [] # global, right, center, left, decimal, None 82 if df.empty: 83 return fmt 84 85 field: list = df.columns.tolist() 86 if index: 87 field.insert(0, df.index.name) 88 89 if header: # ヘッダ(すべて左寄せ) 90 fmt = ["left"] * len(field) 91 else: 92 for x in field: 93 match x: 94 case "ゲーム数": 95 fmt.append("right") 96 case "通算" | "平均" | "1位" | "2位" | "3位" | "4位" | " 平順" | "トビ": 97 fmt.append("right") 98 case "通算" | "順位差" | "トップ差": 99 fmt.append("right") 100 case "レート" | "平均順位" | "順位偏差" | "平均素点" | "得点偏差": 101 fmt.append("right") 102 case _: 103 fmt.append("left") 104 105 return fmt 106 107 108def save_output(df: pd.DataFrame, kind: str, filename: str, headline: str | None = None) -> str | None: 109 """指定されたフォーマットでdfを保存する 110 111 Args: 112 df (pd.DataFrame): _description_ 113 kind (str): フォーマット 114 filename (str): 保存ファイル名 115 headline (str | None, optional): 集計情報(ヘッダコメント). Defaults to None. 116 117 Returns: 118 Union[str, None] 119 - str: 保存したファイルパス 120 - None: 指定したフォーマットで保存できなかった場合 121 """ 122 123 match kind.lower(): 124 case "csv": 125 data = df.to_csv(index=False) 126 case "text" | "txt": 127 data = df.to_markdown( 128 index=False, 129 tablefmt="outline", 130 floatfmt=floatfmt_adjust(df), 131 colalign=column_alignment(df, False), 132 # headersalign=column_alignment(df, True), # ToDo: python-tabulate >= 0.10.0 133 ) 134 case _: 135 return None 136 137 # 保存 138 save_file = os.path.join(g.cfg.setting.work_dir, filename) 139 with open(save_file, "w", encoding="utf-8") as writefile: 140 if headline is not None: # ヘッダ書き込み 141 for line in headline.splitlines(): 142 writefile.writelines(f"# {line}\n") 143 writefile.writelines("\n") 144 145 writefile.writelines(data) 146 147 return save_file 148 149 150def debug_out(msg1: str | list, msg2: str | dict | list | bool | None = None) -> None: 151 """メッセージ標準出力(テスト用) 152 153 Args: 154 msg1 (str | list): メッセージ1 155 msg2 (str | dict | list | bool | None, optional): メッセージ2. Defaults to None. 156 """ 157 158 print(msg1) 159 if isinstance(msg2, dict): 160 for _, val in msg2.items(): 161 print(val) 162 elif msg2: 163 print(msg2) 164 165 166def name_replace(pname: str, add_mark: bool = False) -> str: 167 """表記ブレ修正(正規化) 168 169 Args: 170 pname (str): 対象プレイヤー名 171 add_mark (bool, optional): ゲストマークを付与する. Defaults to False. 172 173 Returns: 174 str: 表記ブレ修正後のプレイヤー名 175 """ 176 177 check_list = list(set(g.member_list.keys())) # 別名を含むリスト 178 check_team = lookup.internal.get_team() 179 180 def _judge(check: str) -> str: 181 if g.params.get("individual"): 182 if check in check_list: 183 return g.member_list.get(check, check) 184 else: 185 if check in check_team: 186 return check 187 return "" 188 189 if (ret_name := _judge(textutil.str_conv(pname, "h2z"))): # 半角数字 -> 全角数字 190 return ret_name 191 192 pname = honor_remove(pname) # 敬称削除 193 194 if (ret_name := _judge(pname)): 195 return ret_name 196 197 if (ret_name := _judge(textutil.str_conv(pname, "k2h"))): # カタカナ -> ひらがな 198 return ret_name 199 200 if (ret_name := _judge(textutil.str_conv(pname, "h2k"))): # ひらがな -> カタカナ 201 return ret_name 202 203 # メンバーリストに見つからない場合 204 if g.params.get("unregistered_replace"): 205 pname = g.cfg.member.guest_name 206 elif add_mark: 207 pname = f"{pname}({g.cfg.setting.guest_mark})" 208 209 return pname 210 211 212def honor_remove(name: str) -> str: 213 """敬称削除 214 215 Args: 216 name (str): 対象の名前 217 218 Returns: 219 str: 敬称を削除した名前 220 """ 221 222 honor = r"(くん|さん|ちゃん|クン|サン|チャン|君)$" 223 if re.match(fr".*{honor}", name): 224 if not re.match(fr".*(っ|ッ|ー){honor}", name): 225 name = re.sub(fr"{honor}", "", name) 226 227 return name 228 229 230def anonymous_mapping(name_list: list, initial: int = 0) -> dict: 231 """名前リストから変換用辞書を生成 232 233 Args: 234 name_list (list): 名前リスト 235 initial (int, optional): インデックス初期値. Defaults to 0. 236 237 Returns: 238 dict: マッピング用辞書 239 """ 240 241 ret: dict = {} 242 243 if g.params.get("individual", True): 244 prefix = "Player" 245 id_list = lookup.db.get_member_id() 246 else: 247 prefix = "Team" 248 id_list = {x["team"]: x["id"] for x in g.team_list} 249 250 if len(name_list) == 1: 251 name = name_list[0] 252 if name in id_list: 253 idx = id_list[name] 254 else: 255 idx = int(random.random() * 100 + 100) 256 ret[name] = f"{prefix}_{idx + initial:03d}" 257 else: 258 random.shuffle(name_list) 259 for idx, name in enumerate(name_list): 260 ret[name] = f"{prefix}_{idx + initial:03d}" 261 262 return ret 263 264 265def df_rename(df: pd.DataFrame, short=True) -> pd.DataFrame: 266 """カラム名をリネームする 267 268 Args: 269 df (pd.DataFrame): 対象データフレーム 270 short (bool, optional): 略語にリネーム. Defaults to True. 271 272 Returns: 273 pd.DataFrame: リネーム後のデータフレーム 274 """ 275 276 rename_dict: dict = { 277 "playtime": "日時", 278 "rate": "レート", 279 # 280 "rpoint": "素点", 281 "point": "獲得ポイント", 282 "rpoint_avg": "平均素点", 283 "point_dev": "得点偏差", "rank_dev": "順位偏差", 284 "grade": "段位", 285 # レコード 286 "max_top": "連続トップ", "max_top2": "連続連対", "max_top3": "連続ラス回避", 287 "max_low": "連続トップなし", "max_low2": "連続逆連対", "max_low4": "連続ラス", 288 "max_point": "最大獲得ポイント", "min_point": "最小獲得ポイント", 289 "max_rpoint": "最大素点", "min_rpoint": "最小素点", 290 # 直接対決 291 "results": "対戦結果", "win%": "勝率", 292 "my_point_sum": "獲得ポイント(自分)", "my_point_avg": "平均ポイント(自分)", 293 "vs_point_sum": "獲得ポイント(相手)", "vs_point_avg": "平均ポイント(相手)", 294 "my_rpoint_avg": "平均素点(自分)", "my_rank_avg": "平均順位(自分)", "my_rank_distr": "順位分布(自分)", 295 "vs_rpoint_avg": "平均素点(相手)", "vs_rank_avg": "平均順位(相手)", "vs_rank_distr": "順位分布(相手)", 296 } 297 298 for x in df.columns: 299 match x: 300 case "rank": 301 rename_dict[x] = "#" if short else "順位" 302 case "name" | "player": 303 rename_dict[x] = "名前" if short else "プレイヤー名" 304 case "team": 305 rename_dict[x] = "チーム" if short else "チーム名" 306 case "count" | "game": 307 rename_dict[x] = "ゲーム数" 308 case "pt_total" | "total_point" | "point_sum" | "total_mix": 309 rename_dict[x] = "通算" if short else "通算ポイント" 310 case "pt_avg" | "avg_point" | "point_avg" | "avg_mix": 311 rename_dict[x] = "平均" if short else "平均ポイント" 312 case "ex_point": 313 rename_dict[x] = "卓外" if short else "卓外ポイント" 314 case "rank_distr" | "rank_distr1" | "rank_distr2": 315 rename_dict[x] = "順位分布" 316 case "rank_avg": 317 rename_dict[x] = "平順" if short else "平均順位" 318 case "1st" | "rank1" | "1st_mix": 319 rename_dict[x] = "1位" 320 case "2nd" | "rank2" | "2nd_mix": 321 rename_dict[x] = "2位" 322 case "3rd" | "rank3" | "3rd_mix": 323 rename_dict[x] = "3位" 324 case "4th" | "rank4" | "4th_mix": 325 rename_dict[x] = "4位" 326 case "1st(%)" | "1st_%" | "rank1_rate": 327 rename_dict[x] = "1位率" 328 case "2nd(%)" | "2nd_%" | "rank2_rate": 329 rename_dict[x] = "2位率" 330 case "3rd(%)" | "3rd_%" | "rank3_rate": 331 rename_dict[x] = "3位率" 332 case "4th(%)" | "4th_%" | "rank4_rate": 333 rename_dict[x] = "4位率" 334 case "1st_count": 335 rename_dict[x] = "1位数" 336 case "2nd_count": 337 rename_dict[x] = "2位数" 338 case "3rd_count": 339 rename_dict[x] = "3位数" 340 case "4th_count": 341 rename_dict[x] = "4位数" 342 case "flying" | "flying_mix": 343 rename_dict[x] = "トビ" 344 case "flying_count": 345 rename_dict[x] = "トビ数" 346 case "flying_rate" | "flying_%": 347 rename_dict[x] = "トビ率" 348 case "pt_diff": 349 rename_dict[x] = "差分" 350 case "diff_from_above": 351 rename_dict[x] = "順位差" 352 case "diff_from_top": 353 rename_dict[x] = "トップ差" 354 case "yakuman_mix" | "grandslam": 355 rename_dict[x] = "役満和了" 356 case "yakuman_count": 357 rename_dict[x] = "役満和了数" 358 case "yakuman_%": 359 rename_dict[x] = "役満和了率" 360 361 if not g.params.get("individual"): 362 rename_dict.update(name="チーム" if short else "チーム名") 363 364 return df.rename(columns=rename_dict)
def
floatfmt_adjust(df: pandas.core.frame.DataFrame, index: bool = False) -> list:
17def floatfmt_adjust(df: pd.DataFrame, index: bool = False) -> list: 18 """カラム名に応じたfloatfmtのリストを返す 19 20 Args: 21 df (pd.DataFrame): チェックするデータ 22 index (bool, optional): リストにIndexを含める. Defaults to False. 23 24 Returns: 25 list: floatfmtに指定するリスト 26 """ 27 28 fmt: list = [] 29 if df.empty: 30 return fmt 31 32 field: list = df.columns.tolist() 33 if index: 34 field.insert(0, df.index.name) 35 36 for x in field: 37 match x: 38 case "ゲーム数" | "game_count": 39 fmt.append(".0f") 40 case "win" | "lose" | "draw" | "top2" | "top3" | "gs_count": 41 fmt.append(".0f") 42 case "通算" | "通算ポイント" | "point_sum": 43 fmt.append("+.1f") 44 case "平均" | "平均ポイント" | "point_avg" | "区間ポイント" | "区間平均": 45 fmt.append("+.1f") 46 case "1st" | "2nd" | "3rd" | "4th" | "1位" | "2位" | "3位" | "4位" | "rank1" | "rank2" | "rank3" | "rank4": 47 fmt.append(".0f") 48 case "1st(%)" | "2nd(%)" | "3rd(%)" | "4th(%)" | "1位率" | "2位率" | "3位率" | "4位率": 49 fmt.append(".2f") 50 case "トビ" | "flying": 51 fmt.append(".0f") 52 case "トビ率": 53 fmt.append(".2f") 54 case "平均順位" | "平順" | "rank_avg": 55 fmt.append(".2f") 56 case "順位差" | "トップ差": 57 fmt.append(".1f") 58 case "レート": 59 fmt.append(".1f") 60 case "順位偏差" | "得点偏差": 61 fmt.append(".0f") 62 case "rpoint_max" | "rpoint_min" | "rpoint_mean": 63 fmt.append(".0f") 64 case _: 65 fmt.append("") 66 67 return fmt
カラム名に応じたfloatfmtのリストを返す
Arguments:
- df (pd.DataFrame): チェックするデータ
- index (bool, optional): リストにIndexを含める. Defaults to False.
Returns:
list: floatfmtに指定するリスト
def
column_alignment( df: pandas.core.frame.DataFrame, header: bool = False, index: bool = False) -> list:
70def column_alignment(df: pd.DataFrame, header: bool = False, index: bool = False) -> list: 71 """カラム位置 72 73 Args: 74 df (pd.DataFrame): チェックするデータ 75 header (bool, optional): ヘッダを対象にする 76 index (bool, optional): リストにIndexを含める. Defaults to False. 77 78 Returns: 79 list: colalignに指定するリスト 80 """ 81 82 fmt: list = [] # global, right, center, left, decimal, None 83 if df.empty: 84 return fmt 85 86 field: list = df.columns.tolist() 87 if index: 88 field.insert(0, df.index.name) 89 90 if header: # ヘッダ(すべて左寄せ) 91 fmt = ["left"] * len(field) 92 else: 93 for x in field: 94 match x: 95 case "ゲーム数": 96 fmt.append("right") 97 case "通算" | "平均" | "1位" | "2位" | "3位" | "4位" | " 平順" | "トビ": 98 fmt.append("right") 99 case "通算" | "順位差" | "トップ差": 100 fmt.append("right") 101 case "レート" | "平均順位" | "順位偏差" | "平均素点" | "得点偏差": 102 fmt.append("right") 103 case _: 104 fmt.append("left") 105 106 return fmt
カラム位置
Arguments:
- df (pd.DataFrame): チェックするデータ
- header (bool, optional): ヘッダを対象にする
- index (bool, optional): リストにIndexを含める. Defaults to False.
Returns:
list: colalignに指定するリスト
def
save_output( df: pandas.core.frame.DataFrame, kind: str, filename: str, headline: str | None = None) -> str | None:
109def save_output(df: pd.DataFrame, kind: str, filename: str, headline: str | None = None) -> str | None: 110 """指定されたフォーマットでdfを保存する 111 112 Args: 113 df (pd.DataFrame): _description_ 114 kind (str): フォーマット 115 filename (str): 保存ファイル名 116 headline (str | None, optional): 集計情報(ヘッダコメント). Defaults to None. 117 118 Returns: 119 Union[str, None] 120 - str: 保存したファイルパス 121 - None: 指定したフォーマットで保存できなかった場合 122 """ 123 124 match kind.lower(): 125 case "csv": 126 data = df.to_csv(index=False) 127 case "text" | "txt": 128 data = df.to_markdown( 129 index=False, 130 tablefmt="outline", 131 floatfmt=floatfmt_adjust(df), 132 colalign=column_alignment(df, False), 133 # headersalign=column_alignment(df, True), # ToDo: python-tabulate >= 0.10.0 134 ) 135 case _: 136 return None 137 138 # 保存 139 save_file = os.path.join(g.cfg.setting.work_dir, filename) 140 with open(save_file, "w", encoding="utf-8") as writefile: 141 if headline is not None: # ヘッダ書き込み 142 for line in headline.splitlines(): 143 writefile.writelines(f"# {line}\n") 144 writefile.writelines("\n") 145 146 writefile.writelines(data) 147 148 return save_file
指定されたフォーマットでdfを保存する
Arguments:
- df (pd.DataFrame): _description_
- kind (str): フォーマット
- filename (str): 保存ファイル名
- headline (str | None, optional): 集計情報(ヘッダコメント). Defaults to None.
Returns:
Union[str, None]
- str: 保存したファイルパス
- None: 指定したフォーマットで保存できなかった場合
def
debug_out(msg1: str | list, msg2: str | dict | list | bool | None = None) -> None:
151def debug_out(msg1: str | list, msg2: str | dict | list | bool | None = None) -> None: 152 """メッセージ標準出力(テスト用) 153 154 Args: 155 msg1 (str | list): メッセージ1 156 msg2 (str | dict | list | bool | None, optional): メッセージ2. Defaults to None. 157 """ 158 159 print(msg1) 160 if isinstance(msg2, dict): 161 for _, val in msg2.items(): 162 print(val) 163 elif msg2: 164 print(msg2)
メッセージ標準出力(テスト用)
Arguments:
- msg1 (str | list): メッセージ1
- msg2 (str | dict | list | bool | None, optional): メッセージ2. Defaults to None.
def
name_replace(pname: str, add_mark: bool = False) -> str:
167def name_replace(pname: str, add_mark: bool = False) -> str: 168 """表記ブレ修正(正規化) 169 170 Args: 171 pname (str): 対象プレイヤー名 172 add_mark (bool, optional): ゲストマークを付与する. Defaults to False. 173 174 Returns: 175 str: 表記ブレ修正後のプレイヤー名 176 """ 177 178 check_list = list(set(g.member_list.keys())) # 別名を含むリスト 179 check_team = lookup.internal.get_team() 180 181 def _judge(check: str) -> str: 182 if g.params.get("individual"): 183 if check in check_list: 184 return g.member_list.get(check, check) 185 else: 186 if check in check_team: 187 return check 188 return "" 189 190 if (ret_name := _judge(textutil.str_conv(pname, "h2z"))): # 半角数字 -> 全角数字 191 return ret_name 192 193 pname = honor_remove(pname) # 敬称削除 194 195 if (ret_name := _judge(pname)): 196 return ret_name 197 198 if (ret_name := _judge(textutil.str_conv(pname, "k2h"))): # カタカナ -> ひらがな 199 return ret_name 200 201 if (ret_name := _judge(textutil.str_conv(pname, "h2k"))): # ひらがな -> カタカナ 202 return ret_name 203 204 # メンバーリストに見つからない場合 205 if g.params.get("unregistered_replace"): 206 pname = g.cfg.member.guest_name 207 elif add_mark: 208 pname = f"{pname}({g.cfg.setting.guest_mark})" 209 210 return pname
表記ブレ修正(正規化)
Arguments:
- pname (str): 対象プレイヤー名
- add_mark (bool, optional): ゲストマークを付与する. Defaults to False.
Returns:
str: 表記ブレ修正後のプレイヤー名
def
honor_remove(name: str) -> str:
213def honor_remove(name: str) -> str: 214 """敬称削除 215 216 Args: 217 name (str): 対象の名前 218 219 Returns: 220 str: 敬称を削除した名前 221 """ 222 223 honor = r"(くん|さん|ちゃん|クン|サン|チャン|君)$" 224 if re.match(fr".*{honor}", name): 225 if not re.match(fr".*(っ|ッ|ー){honor}", name): 226 name = re.sub(fr"{honor}", "", name) 227 228 return name
敬称削除
Arguments:
- name (str): 対象の名前
Returns:
str: 敬称を削除した名前
def
anonymous_mapping(name_list: list, initial: int = 0) -> dict:
231def anonymous_mapping(name_list: list, initial: int = 0) -> dict: 232 """名前リストから変換用辞書を生成 233 234 Args: 235 name_list (list): 名前リスト 236 initial (int, optional): インデックス初期値. Defaults to 0. 237 238 Returns: 239 dict: マッピング用辞書 240 """ 241 242 ret: dict = {} 243 244 if g.params.get("individual", True): 245 prefix = "Player" 246 id_list = lookup.db.get_member_id() 247 else: 248 prefix = "Team" 249 id_list = {x["team"]: x["id"] for x in g.team_list} 250 251 if len(name_list) == 1: 252 name = name_list[0] 253 if name in id_list: 254 idx = id_list[name] 255 else: 256 idx = int(random.random() * 100 + 100) 257 ret[name] = f"{prefix}_{idx + initial:03d}" 258 else: 259 random.shuffle(name_list) 260 for idx, name in enumerate(name_list): 261 ret[name] = f"{prefix}_{idx + initial:03d}" 262 263 return ret
名前リストから変換用辞書を生成
Arguments:
- name_list (list): 名前リスト
- initial (int, optional): インデックス初期値. Defaults to 0.
Returns:
dict: マッピング用辞書
def
df_rename( df: pandas.core.frame.DataFrame, short=True) -> pandas.core.frame.DataFrame:
266def df_rename(df: pd.DataFrame, short=True) -> pd.DataFrame: 267 """カラム名をリネームする 268 269 Args: 270 df (pd.DataFrame): 対象データフレーム 271 short (bool, optional): 略語にリネーム. Defaults to True. 272 273 Returns: 274 pd.DataFrame: リネーム後のデータフレーム 275 """ 276 277 rename_dict: dict = { 278 "playtime": "日時", 279 "rate": "レート", 280 # 281 "rpoint": "素点", 282 "point": "獲得ポイント", 283 "rpoint_avg": "平均素点", 284 "point_dev": "得点偏差", "rank_dev": "順位偏差", 285 "grade": "段位", 286 # レコード 287 "max_top": "連続トップ", "max_top2": "連続連対", "max_top3": "連続ラス回避", 288 "max_low": "連続トップなし", "max_low2": "連続逆連対", "max_low4": "連続ラス", 289 "max_point": "最大獲得ポイント", "min_point": "最小獲得ポイント", 290 "max_rpoint": "最大素点", "min_rpoint": "最小素点", 291 # 直接対決 292 "results": "対戦結果", "win%": "勝率", 293 "my_point_sum": "獲得ポイント(自分)", "my_point_avg": "平均ポイント(自分)", 294 "vs_point_sum": "獲得ポイント(相手)", "vs_point_avg": "平均ポイント(相手)", 295 "my_rpoint_avg": "平均素点(自分)", "my_rank_avg": "平均順位(自分)", "my_rank_distr": "順位分布(自分)", 296 "vs_rpoint_avg": "平均素点(相手)", "vs_rank_avg": "平均順位(相手)", "vs_rank_distr": "順位分布(相手)", 297 } 298 299 for x in df.columns: 300 match x: 301 case "rank": 302 rename_dict[x] = "#" if short else "順位" 303 case "name" | "player": 304 rename_dict[x] = "名前" if short else "プレイヤー名" 305 case "team": 306 rename_dict[x] = "チーム" if short else "チーム名" 307 case "count" | "game": 308 rename_dict[x] = "ゲーム数" 309 case "pt_total" | "total_point" | "point_sum" | "total_mix": 310 rename_dict[x] = "通算" if short else "通算ポイント" 311 case "pt_avg" | "avg_point" | "point_avg" | "avg_mix": 312 rename_dict[x] = "平均" if short else "平均ポイント" 313 case "ex_point": 314 rename_dict[x] = "卓外" if short else "卓外ポイント" 315 case "rank_distr" | "rank_distr1" | "rank_distr2": 316 rename_dict[x] = "順位分布" 317 case "rank_avg": 318 rename_dict[x] = "平順" if short else "平均順位" 319 case "1st" | "rank1" | "1st_mix": 320 rename_dict[x] = "1位" 321 case "2nd" | "rank2" | "2nd_mix": 322 rename_dict[x] = "2位" 323 case "3rd" | "rank3" | "3rd_mix": 324 rename_dict[x] = "3位" 325 case "4th" | "rank4" | "4th_mix": 326 rename_dict[x] = "4位" 327 case "1st(%)" | "1st_%" | "rank1_rate": 328 rename_dict[x] = "1位率" 329 case "2nd(%)" | "2nd_%" | "rank2_rate": 330 rename_dict[x] = "2位率" 331 case "3rd(%)" | "3rd_%" | "rank3_rate": 332 rename_dict[x] = "3位率" 333 case "4th(%)" | "4th_%" | "rank4_rate": 334 rename_dict[x] = "4位率" 335 case "1st_count": 336 rename_dict[x] = "1位数" 337 case "2nd_count": 338 rename_dict[x] = "2位数" 339 case "3rd_count": 340 rename_dict[x] = "3位数" 341 case "4th_count": 342 rename_dict[x] = "4位数" 343 case "flying" | "flying_mix": 344 rename_dict[x] = "トビ" 345 case "flying_count": 346 rename_dict[x] = "トビ数" 347 case "flying_rate" | "flying_%": 348 rename_dict[x] = "トビ率" 349 case "pt_diff": 350 rename_dict[x] = "差分" 351 case "diff_from_above": 352 rename_dict[x] = "順位差" 353 case "diff_from_top": 354 rename_dict[x] = "トップ差" 355 case "yakuman_mix" | "grandslam": 356 rename_dict[x] = "役満和了" 357 case "yakuman_count": 358 rename_dict[x] = "役満和了数" 359 case "yakuman_%": 360 rename_dict[x] = "役満和了率" 361 362 if not g.params.get("individual"): 363 rename_dict.update(name="チーム" if short else "チーム名") 364 365 return df.rename(columns=rename_dict)
カラム名をリネームする
Arguments:
- df (pd.DataFrame): 対象データフレーム
- short (bool, optional): 略語にリネーム. Defaults to True.
Returns:
pd.DataFrame: リネーム後のデータフレーム