2.0.1: Updated solo

This commit is contained in:
2026-01-27 22:01:17 +08:00
parent c4607d8080
commit b3941cad3b
4 changed files with 33 additions and 38 deletions

View File

@@ -1001,7 +1001,6 @@ class FeatureService:
WHERE match_id IN ({match_id_ph}) AND match_team_id > 0
GROUP BY match_id, match_team_id
"""
# Split match_ids into chunks if too many
chunk_size = 900
party_sizes_list = []
for i in range(0, len(match_ids), chunk_size):
@@ -1012,44 +1011,40 @@ class FeatureService:
if party_sizes_list:
df_party_sizes = pd.concat(party_sizes_list)
# Merge party size to base data
df_base_party = df_base.merge(df_party_sizes, on=['match_id', 'match_team_id'], how='left')
# Calculate Stats per Party Size (1-5)
# We want columns like party_1_win_rate, party_1_rating, party_1_adr
party_stats = df_base_party.groupby(['steam_id_64', 'party_size']).agg({
'is_win': 'mean',
'rating': 'mean',
'adr': 'mean'
}).reset_index()
# Pivot
pivoted_party = party_stats.pivot(index='steam_id_64', columns='party_size').reset_index()
# Flatten and rename
new_party_cols = ['steam_id_64']
for col in pivoted_party.columns:
if col[0] == 'steam_id_64': continue
metric, size = col
if size in [1, 2, 3, 4, 5]:
# metric is is_win, rating, adr
metric_name = 'win_rate' if metric == 'is_win' else metric
new_party_cols.append(f"party_{int(size)}_{metric_name}")
# Handle MultiIndex column flattening properly
# The pivot creates MultiIndex. We need to construct a flat DataFrame.
flat_data = {'steam_id_64': pivoted_party['steam_id_64']}
for size in [1, 2, 3, 4, 5]:
if size in pivoted_party['is_win'].columns:
flat_data[f"party_{size}_win_rate"] = pivoted_party['is_win'][size]
if size in pivoted_party['rating'].columns:
flat_data[f"party_{size}_rating"] = pivoted_party['rating'][size]
if size in pivoted_party['adr'].columns:
flat_data[f"party_{size}_adr"] = pivoted_party['adr'][size]
df_party_flat = pd.DataFrame(flat_data)
df = df.merge(df_party_flat, on='steam_id_64', how='left')
else:
df_base_party = df_base.copy()
df_base_party['party_size'] = df_base_party['party_size'].fillna(1)
df_base_party = df_base_party[df_base_party['party_size'].isin([1, 2, 3, 4, 5])]
party_stats = df_base_party.groupby(['steam_id_64', 'party_size']).agg({
'is_win': 'mean',
'rating': 'mean',
'adr': 'mean'
}).reset_index()
pivoted_party = party_stats.pivot(index='steam_id_64', columns='party_size').reset_index()
new_party_cols = ['steam_id_64']
for col in pivoted_party.columns:
if col[0] == 'steam_id_64': continue
metric, size = col
if size in [1, 2, 3, 4, 5]:
metric_name = 'win_rate' if metric == 'is_win' else metric
new_party_cols.append(f"party_{int(size)}_{metric_name}")
flat_data = {'steam_id_64': pivoted_party['steam_id_64']}
for size in [1, 2, 3, 4, 5]:
if size in pivoted_party['is_win'].columns:
flat_data[f"party_{size}_win_rate"] = pivoted_party['is_win'][size]
if size in pivoted_party['rating'].columns:
flat_data[f"party_{size}_rating"] = pivoted_party['rating'][size]
if size in pivoted_party['adr'].columns:
flat_data[f"party_{size}_adr"] = pivoted_party['adr'][size]
df_party_flat = pd.DataFrame(flat_data)
df = df.merge(df_party_flat, on='steam_id_64', how='left')
# 8.2 Rating Distribution
# rating_dist_carry_rate (>1.5), normal (1.0-1.5), sacrifice (0.6-1.0), sleeping (<0.6)