Spaces:
Sleeping
Sleeping
File size: 2,967 Bytes
a47e303 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
"""
νλͺ
λ§€ν κ΄λ ¨ μ νΈλ¦¬ν° λͺ¨λ
"""
import json
import pandas as pd
from typing import Dict, List, Any
def load_mapping_file(mapping_file: str) -> Dict[str, Dict[str, str]]:
"""
λ§€ν νμΌμ λ‘λνμ¬ λμ
λ리 ννλ‘ λ°ν
Args:
mapping_file: λ§€ν νμΌ κ²½λ‘
Returns:
λ§€ν λμ
λ리: {νλͺ
: {present: νμ¬νλͺ
, CD_ACCT: κ³μ μ½λ, CD_PJT: νλ‘μ νΈμ½λ}}
"""
try:
with open(mapping_file, 'r', encoding='utf-8') as f:
mapping_list = json.load(f)
# λ§€ν λμ
λ리 μμ±
mapping_dict = {}
for item in mapping_list:
mapping_dict[item['past']] = {
'present': item['present'],
'CD_ACCT': item['CD_ACCT'],
'CD_PJT': item['CD_PJT']
}
print(f"λ§€ν μ 보 λ‘λ μλ£: {len(mapping_dict)}κ° νλͺ©")
return mapping_dict
except Exception as e:
print(f"λ§€ν νμΌ λ‘λ μ€ μ€λ₯ λ°μ: {e}")
return {}
def apply_mapping(team_name: str, mapping_dict: Dict[str, Dict[str, str]]) -> Dict[str, str]:
"""
νλͺ
μ λ§€ν μ 보 μ μ©
Args:
team_name: μλ³Έ νλͺ
mapping_dict: λ§€ν λμ
λ리
Returns:
λ§€νλ μ 보: {present: νμ¬νλͺ
, CD_ACCT: κ³μ μ½λ, CD_PJT: νλ‘μ νΈμ½λ}
"""
if pd.isna(team_name) or team_name == "":
return {"present": "", "CD_ACCT": "", "CD_PJT": ""}
if team_name in mapping_dict:
return mapping_dict[team_name]
# μλ κ²½μ° λΉ κ° λ°ν
return {"present": team_name, "CD_ACCT": "", "CD_PJT": ""}
def get_unmapped_teams(df: pd.DataFrame) -> List[str]:
"""
λ§€νλμ§ μμ νλͺ
λͺ©λ‘ μΆμΆ
Args:
df: λ°μ΄ν°νλ μ
Returns:
λ§€νλμ§ μμ νλͺ
λͺ©λ‘
"""
unmapped_df = df[(df["CD_ACCT"] == "") | (df["CD_PJT"] == "")]
return unmapped_df["μλ³Ένλͺ
"].unique().tolist()
def get_mapping_summary(df_filtered: pd.DataFrame, mapping_dict: Dict[str, Dict[str, str]]) -> Dict[str, Any]:
"""
λ§€ν κ²°κ³Ό μμ½ μ 보 μμ±
Args:
df_filtered: νν°λ§λ λ°μ΄ν°νλ μ
mapping_dict: λ§€ν λμ
λ리
Returns:
λ§€ν μμ½ μ 보: {mapped_teams: λ§€νλ νλͺ
λͺ©λ‘, unmapped_teams: λ§€νλμ§ μμ νλͺ
λͺ©λ‘}
"""
mapped_teams = []
for team in df_filtered["μλ³Ένλͺ
"].unique():
mapped_info = mapping_dict.get(team, {})
mapped_teams.append({
'original': team,
'mapped': mapped_info.get('present', team),
'acct': mapped_info.get('CD_ACCT', ''),
'pjt': mapped_info.get('CD_PJT', '')
})
return {
'mapped_teams': mapped_teams,
'mapped_count': len(mapped_teams)
} |