Regenerated Code Output (V2)
<execute_python>
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Filter for Q1 2024 and 2025
q1_2024 = df[(df['year'] == 2024) & (df['quarter'] == 1)]
q1_2025 = df[(df['year'] == 2025) & (df['quarter'] == 1)]

# Sum sales by coffee name
sales_2024 = q1_2024.groupby('coffee_name')['price'].sum()
sales_2025 = q1_2025.groupby('coffee_name')['price'].sum()

# Ensure all coffee names are represented
all_coffees = sorted(set(sales_2024.index).union(sales_2025.index))
sales_2024 = sales_2024.reindex(all_coffees, fill_value=0)
sales_2025 = sales_2025.reindex(all_coffees, fill_value=0)

# Plotting grouped bars
x = np.arange(len(all_coffees))
width = 0.35

plt.figure(figsize=(10, 6))
bars1 = plt.bar(x - width/2, sales_2024, width, label='2024', color='#1f77b4')
bars2 = plt.bar(x + width/2, sales_2025, width, label='2025', color='#ff7f0e')

plt.title('Q1 Coffee Sales Comparison: 2024 vs 2025')
plt.xlabel('Coffee Name')
plt.ylabel('Total Sales ($)')
plt.xticks(x, all_coffees, rotation=45, ha='right')
plt.legend()
plt.grid(axis='y', linestyle='--', alpha=0.7)

# Annotate bar values
y_max = max(sales_2024.max(), sales_2025.max())
offset = y_max * 0.01
for bar in list(bars1) + list(bars2):
    height = bar.get_height()
    plt.text(bar.get_x() + bar.get_width()/2, height + offset, f'{int(height)}', ha='center', va='bottom', fontsize=8)

plt.tight_layout()
plt.savefig('chart_v2.png', dpi=300)
plt.close()
</execute_python>