58 lines
2.5 KiB
Python
58 lines
2.5 KiB
Python
import pandas as pd
|
|
|
|
def aggregate_results(matched_names, expert_data, community_data, max_results=30):
|
|
"""
|
|
Aggregate similar images, appraisal values, years, and status for matched tag names.
|
|
Args:
|
|
matched_names (list): List of tag names to match.
|
|
expert_data (pd.DataFrame): Expert dataset.
|
|
community_data (pd.DataFrame): Community dataset.
|
|
max_results (int): Maximum number of results to return.
|
|
Returns:
|
|
dict: Aggregated results with images, appraisal values, years, and status.
|
|
"""
|
|
similar_data = []
|
|
|
|
for title in matched_names:
|
|
# Handle expert data (no 'year' column)
|
|
community_items = community_data[community_data['brand_name'] == title]
|
|
expert_items = expert_data[expert_data['brand_name'] == title]
|
|
|
|
# Process community data (has 'year' column)
|
|
if not community_items.empty:
|
|
# Use 'year' column if it exists, otherwise use 'year_start'
|
|
year_col = 'year' if 'year' in community_items.columns else 'year_start'
|
|
community_records = community_items[['front_tag', 'appraisal_value', 'key', 'status', year_col]].to_dict('records')
|
|
# Rename year column to 'year' for consistency
|
|
for record in community_records:
|
|
record['year'] = record.pop(year_col) if year_col in record else None
|
|
similar_data.extend(community_records)
|
|
|
|
# Process expert data (no 'year' column)
|
|
if not expert_items.empty:
|
|
expert_records = expert_items[['front_tag', 'appraisal_value', 'key', 'status']].to_dict('records')
|
|
# Add None for year since expert data doesn't have it
|
|
for record in expert_records:
|
|
record['year'] = None
|
|
similar_data.extend(expert_records)
|
|
|
|
# Remove duplicates by key, preserving order
|
|
seen_keys = set()
|
|
unique_data = []
|
|
for item in similar_data:
|
|
if item['key'] not in seen_keys:
|
|
seen_keys.add(item['key'])
|
|
unique_data.append(item)
|
|
|
|
# Prepare results
|
|
similar_images = [item['front_tag'] for item in unique_data][:max_results]
|
|
appraisal_values = [item['appraisal_value'] for item in unique_data][:max_results]
|
|
years = [item.get('year') for item in unique_data][:max_results]
|
|
statuses = [item['status'] for item in unique_data][:max_results]
|
|
|
|
return {
|
|
'similar_images': similar_images,
|
|
'appraisal_values': appraisal_values,
|
|
'years': years,
|
|
'statuses': statuses
|
|
} |