All prices in €, as of march 1, 2024, as found on the brand websites.
11 shops, 86 coffees in total
import pandas as pd
import numpy as np
import plotly.express as px
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
df = pd.read_csv("coffee.csv")
#convert euros to float
df['250gr'] = df['250gr'].replace('[^\d.]', '', regex=True).astype(float)
df['1kg'] = df['1kg'].replace('[^\d.]', '', regex=True).astype(float)
df['cpc_250g'] = df['cpc_250g'].replace('[^\d.]', '', regex=True).astype(float)
df['cpc_1kg'] = df['cpc_1kg'].replace('[^\d.]', '', regex=True).astype(float)
df
shop | name | url | country | type | process | notes | 250gr | 1kg | cpc_250g | cpc_1kg | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | coffee circle | house blend | https://www.coffeecircle.com/en/k/house-blend-... | brazil, laos, colombia, congo | blend | natural | Characterful | Marzipan, Nougat | 9.90 | 33.90 | 0.71 | 0.61 |
1 | coffee circle | sidamo | https://www.coffeecircle.com/en/k/sidamo-espresso | ethiopia | so | natural | Lively | Caramel, Dark Berries | 10.90 | 36.90 | 0.78 | 0.66 |
2 | coffee circle | cerrado | https://www.coffeecircle.com/en/k/cerrado | brazil | so | natural | Velvety | Hazelnut, Sweet Fruits | 10.90 | 36.90 | 0.78 | 0.66 |
3 | coffee circle | tiga terra omniroast | https://www.coffeecircle.com/en/k/tiga-terra | brazil, guinea, indonesia | blend | natural | Full-bodied | Chocolate, Walnut | 11.90 | 40.90 | 0.86 | 0.74 |
4 | coffee circle | yirga santos | https://www.coffeecircle.com/en/k/yirga-santos... | india, brazil, ethiopia | blend | (mixed) | Strong | Chocolate, Brown Sugar | 9.90 | 33.90 | 0.71 | 0.61 |
5 | coffee circle | pacas | https://www.coffeecircle.com/en/k/pacas | el salvador | so | washed | Balanced | Hazelnut, Nougat | 14.90 | 50.90 | 1.07 | 0.92 |
6 | coffee circle | feliciano castillo | https://www.coffeecircle.com/en/k/feliciano-ca... | honduras | so | washed | Velvety | Dark Chocolate, Pecan Nut | 14.90 | 50.90 | 1.07 | 0.92 |
7 | coffee circle | espresso chire | https://www.coffeecircle.com/en/k/chire-espresso | ethiopia | so | natural | Velvety | Lime, Strawberry | 14.90 | 50.90 | 1.07 | 0.92 |
8 | coffee circle | grano gayo | https://www.coffeecircle.com/en/k/grano-gayo-e... | peru, indonesia, colombia | blend | washed | Strong | Brown Sugar, Tiramisu | 10.90 | 36.90 | 0.78 | 0.66 |
9 | coffee circle | francisco lopez | https://www.coffeecircle.com/en/k/francisco-lo... | guatemala | so | washed | Creamy | Almond, Chocolate | 14.90 | 50.90 | 1.07 | 0.92 |
10 | coffee circle | espresso decaf | https://www.coffeecircle.com/en/k/decaf-espres... | colombia | so | washed | Well-Balanced | Cinnamon, Chocolate Cookie | 10.90 | 36.90 | 0.78 | 0.66 |
11 | coffee circle | yirga santos decaf | https://www.coffeecircle.com/en/k/yirga-santos... | ethiopia | so | natural | Strong | Chocolate, Brown Sugar | 11.90 | 40.90 | 0.86 | 0.74 |
12 | fjord | house blend | https://fjord-coffee.de/products/house-blend | brazil, peru | blend | (mixed) | chocolatey tones and a fruity highlights | 12.90 | 41.50 | 0.93 | 0.75 |
13 | fjord | samii aricha | https://fjord-coffee.de/products/ethiopia-sami... | ethiopia | so | washed | Butterscotch, White Peach, Sultana | 20.90 | 71.90 | 1.50 | 1.29 |
14 | fjord | kii ab | https://fjord-coffee.de/products/kenya-kii-ab-... | kenya | so | washed | Cranberry, Red Currant, Hibiscus | 20.90 | 73.90 | 1.50 | 1.33 |
15 | fjord | puente solaya | https://fjord-coffee.de/products/peru-puente-s... | peru | so | washed | Milk Chocolate, Cherry, Clementine | 14.90 | 49.90 | 1.07 | 0.90 |
16 | fjord | fes red bourbon | https://fjord-coffee.de/products/el-salvador-f... | el salvador | so | natural | Caramel, Pink Lady, White Peach | 18.90 | 62.90 | 1.36 | 1.13 |
17 | fjord | mi mina | https://fjord-coffee.de/products/honduras-mi-m... | honduras | so | natural | Cocoa, Cashew, Blueberry | 16.90 | 58.90 | 1.22 | 1.06 |
18 | fjord | francisco becerra | https://fjord-coffee.de/products/colombia-fran... | colombia | so | washed | Raspberry, Citrus, Red Apple | 17.90 | 60.90 | 1.29 | 1.10 |
19 | five elephant | house blend | https://www.fiveelephant.com/collections/espre... | el salvador | blend | NaN | orange, bittersweet cacao nibs and mellow cham... | 10.19 | 33.55 | 0.73 | 0.60 |
20 | five elephant | cyesha washed | https://www.fiveelephant.com/collections/espre... | rwanda | so | washed | rose water, red apple, panela | 16.90 | 49.82 | 1.22 | 0.90 |
21 | five elephant | nandi hills | https://www.fiveelephant.com/collections/espre... | kenya | so | washed | goji berry, candied apple, hibiscus | 16.90 | 46.45 | 1.22 | 0.84 |
22 | five elephant | decaf omni roast | https://www.fiveelephant.com/collections/espre... | colombia | so | washed | choc chip cookie, roasted hazelnut, and juicy ... | 14.50 | 42.90 | 1.04 | 0.77 |
23 | bonanza coffee | blend | https://shop.bonanzacoffee.de/products/bonanza... | brazil, peru | blend | washed | CHOCOLATE TRUFFLE & DARK CHERRY | 13.90 | 45.50 | 1.00 | 0.82 |
24 | bonanza coffee | nairobi | https://shop.bonanzacoffee.de/collections/coff... | colombia | so | washed | NECTARINE, PLUM JAM & NOUGAT | 16.90 | 67.60 | 1.22 | 1.22 |
25 | bonanza coffee | kathima ab | https://shop.bonanzacoffee.de/collections/coff... | kenya | so | washed | RASPBERRY, BLOOD ORANGE, MAPLE SYRUP | 17.90 | 71.60 | 1.29 | 1.29 |
26 | bonanza coffee | finca rabanales | https://shop.bonanzacoffee.de/collections/coff... | guatemala | so | honey | CANDIED ALMOND, CARAMEL, PAPAYA | 15.90 | 53.50 | 1.14 | 0.96 |
27 | bonanza coffee | caballero | https://shop.bonanzacoffee.de/collections/coff... | honduras | so | washed | TOFFEE, HAZELNUT CREAM, GOLDEN RAISIN | 15.90 | 63.60 | 1.14 | 1.14 |
28 | bonanza coffee | samii chelbesa | https://shop.bonanzacoffee.de/collections/coff... | ethiopia | so | washed | HONEY MELON, LEMON CURD & DARJEELING TEA | 17.90 | 71.60 | 1.29 | 1.29 |
29 | bonanza coffee | gogogu | https://shop.bonanzacoffee.de/collections/coff... | ethiopia | so | natural | MILK CHOCOLATE, BROWN SUGAR & NECTARINE | 16.90 | 57.50 | 1.22 | 1.04 |
30 | bonanza coffee | sitio vargem grande | https://shop.bonanzacoffee.de/collections/coff... | brazil | so | anaerobic | TOFFEE, DARK CHOCOLATE & STRAWBERRY JAM | 15.90 | 53.50 | 1.14 | 0.96 |
31 | bonanza coffee | el carmen | https://shop.bonanzacoffee.de/collections/coff... | colombia | so | washed | RED APPLE, ALMOND & MOLASSES | 15.90 | 53.50 | 1.14 | 0.96 |
32 | bonanza coffee | dark roast | https://shop.bonanzacoffee.de/collections/coff... | brazil | so | natural | DARK CHOCOLATE | 12.90 | 41.50 | 0.93 | 0.75 |
33 | the barn | boa vista | https://thebarn.de/products/boa-vista | brazil | so | natural | Chocolate. Brazil Nut. Fudge. | 14.00 | 53.00 | 1.01 | 0.95 |
34 | the barn | cruz gorda | https://thebarn.de/products/cruz-gorda | el salvador | so | natural | Chocolate Ganache. Cherry. Rich. | 14.50 | 58.00 | 1.04 | 1.04 |
35 | the barn | la colina | https://thebarn.de/products/la-colina | guatemala | so | washed | Chocolate. Citrus. Velvety. | 14.50 | 58.00 | 1.04 | 1.04 |
36 | the barn | gigesa | https://thebarn.de/products/gigesa | ethiopia | so | washed | Peach. Elderflower. Silky. | 15.00 | 60.00 | 1.08 | 1.08 |
37 | the barn | caballero | https://thebarn.de/products/caballero | honduras | so | washed | Nougat. Macadamia. Vanilla. | 15.00 | 60.00 | 1.08 | 1.08 |
38 | the barn | giakanja ab | https://thebarn.de/products/giakanja-ab-espresso | kenya | so | washed | Blackberry. Vanilla. Bold. | 15.50 | 62.00 | 1.12 | 1.12 |
39 | the barn | huye mountain | https://thebarn.de/products/huye-mountain-natural | rwanda | so | natural | Cherries. Raisin. | 15.50 | 62.00 | 1.12 | 1.12 |
40 | the barn | mohamed ali natural | https://thebarn.de/products/mohamed-ali-natural | ethiopia | so | natural | Strawberry. Chocolate. Creamy. | 16.00 | 64.00 | 1.15 | 1.15 |
41 | the barn | daterra reserve low caf | https://thebarn.de/products/daterra-reserve | brazil | so | natural | cherry jam, nougat | 18.00 | 72.00 | 1.30 | 1.30 |
42 | 19 grams | Café des Mamas - Women's Day Special | https://19grams.coffee/en/products/cafe-des-ma... | rwanda | so | natural | Blueberry, Mango, Coconut | 18.90 | 75.60 | 1.36 | 1.36 |
43 | 19 grams | los tres potros SL28 | https://19grams.coffee/en/products/los-tres-po... | el salvador | so | natural | Yellow Plum, Gooseberry, Cashew | 18.90 | 64.90 | 1.36 | 1.17 |
44 | 19 grams | la montana | https://19grams.coffee/en/products/la-montana-... | el salvador | so | natural | Raspberry, Toffee, Milk Chocolate | 16.90 | 57.90 | 1.22 | 1.04 |
45 | 19 grams | la esperanza | https://19grams.coffee/en/products/la-esperanz... | peru | so | washed | Figs, Wild Honey, Clementine | 13.90 | 47.90 | 1.00 | 0.86 |
46 | 19 grams | orang utan | https://19grams.coffee/en/products/orang-utan-... | indonesia | so | washed | Caramel, Apple, Dark chocolate | 12.90 | 43.90 | 0.93 | 0.79 |
47 | 19 grams | decaf | https://19grams.coffee/en/products/entkoffeini... | colombia | so | washed | Ripe figs, Brown sugar, Dark chocolate | 12.90 | 43.90 | 0.93 | 0.79 |
48 | 19 grams | wild at heart | https://19grams.coffee/en/products/wild-at-heart | brazil, ethiopia | blend | (mixed) | Caramel, Strawberry, Chocolate | 11.90 | 47.60 | 0.86 | 0.86 |
49 | 19 grams | endless summer | https://19grams.coffee/en/products/endless-sum... | nicaragua | so | washed | Cocoa, Melon, Cane sugar | 10.90 | 37.90 | 0.78 | 0.68 |
50 | 19 grams | little flower | https://19grams.coffee/en/products/little-flow... | india | so | washed | Cocoa, Hazelnut , Marzipan | 9.90 | 33.90 | 0.71 | 0.61 |
51 | 19 grams | italo disco | https://19grams.coffee/en/products/italo-disco... | brazil | so | natural | Dark Chocolate, Caramel, Cherry Jam | 9.90 | 39.60 | 0.71 | 0.71 |
52 | populus | guji highland | https://www.populus.coffee/product-page/ethiop... | ethiopia | so | natural | Strawberry, pomegranate, dried fig | 15.90 | 57.50 | 1.14 | 1.04 |
53 | populus | luz maria | https://www.populus.coffee/product-page/mexico... | mexico | so | honey | Bergamot, Honeydew, Mandarine | 15.90 | 57.50 | 1.14 | 1.04 |
54 | populus | khalid shifa | https://www.populus.coffee/product-page/ethiop... | ethiopia | so | honey | Bergamot, honeydew and mandarine | 15.90 | 57.50 | 1.14 | 1.04 |
55 | populus | oreti estate aa | https://www.populus.coffee/product-page/kenya-... | kenya | so | washed | Black currants, rose hips, persimmon | 16.50 | 59.90 | 1.19 | 1.08 |
56 | populus | andrade bros | https://www.populus.coffee/product-page/brazil... | brazil | so | natural | Cacao nibs, pineapple, rose | 14.50 | 51.90 | 1.04 | 0.93 |
57 | populus | big shot | https://www.populus.coffee/product-page/big-shot | brazil, honduras | blend | (mixed) | Dark chocolate, Medjool dates, red apple | 11.90 | 42.50 | 0.86 | 0.77 |
58 | populus | zeitgeist | https://www.populus.coffee/product-page/zeitgeist | el salvador, ethiopia | blend | (mixed) | dried cherry, cacao nibs, hazelnut butter | 11.90 | 42.50 | 0.86 | 0.77 |
59 | populus | peace easy (decaf) | https://www.populus.coffee/product-page/peace-... | colombia | blend | sugarcane | Creamy, milk chocolatey, smooth, cherry, molas... | 11.90 | 42.50 | 0.86 | 0.77 |
60 | cebe | santa catarina | https://www.cebecoffeeroasters.com/product-pag... | brazil | so | natural | banana | 13.50 | 40.50 | 0.97 | 0.73 |
61 | cebe | sonara | https://www.cebecoffeeroasters.com/product-pag... | costa rica | so | honey | stone fruit, cacao powder, watermelon | 15.00 | 45.00 | 1.08 | 0.81 |
62 | cebe | danisa | https://www.cebecoffeeroasters.com/product-pag... | ethiopia | so | natural | Mixed berries, bergamot, dark chocolate | 14.50 | 43.50 | 1.04 | 0.78 |
63 | cebe | cuzcatleco | https://www.cebecoffeeroasters.com/product-pag... | el salvador | so | honey | Honey, Pineapple Round body | 15.00 | 45.00 | 1.08 | 0.81 |
64 | cebe | cauca | https://www.cebecoffeeroasters.com/product-pag... | colombia | so | anaerobic | Berry like, Dried Plum, Cacao, Vanila | 17.50 | 70.00 | 1.26 | 1.26 |
65 | passenger | blend | https://www.passenger-coffee.de/shop/espressob... | brazil, india, indonesia, guatemala, ethiopia | blend | NaN | crunchy nuts, butter-soaked spices, mild berri... | 9.50 | 32.00 | 0.68 | 0.58 |
66 | passenger | blend 2 | https://www.passenger-coffee.de/shop/espressob... | colombia, mexico, kenya | blend | NaN | honeyed and floral note, orange and blackcurrant | 10.50 | 35.00 | 0.76 | 0.63 |
67 | passenger | raw | https://www.passenger-coffee.de/shop/espressob... | timor-leste, mexico, rwanda, burundi | blend | NaN | NaN | 11.50 | 38.00 | 0.83 | 0.68 |
68 | passenger | decaf | https://www.passenger-coffee.de/shop/espressob... | colombia | so | NaN | cherry bomb with nuances of dried dates and da... | 9.50 | 32.00 | 0.68 | 0.58 |
69 | passenger | timor-leste | https://www.passenger-coffee.de/shop/espressob... | timor-leste | so | NaN | floral flavors accompanied by baked plums | 10.50 | 35.00 | 0.76 | 0.63 |
70 | passenger | mexico | https://www.passenger-coffee.de/shop/espressob... | mexico | so | NaN | chocolate, traces of mango and a bite of mandarin | 10.50 | 35.00 | 0.76 | 0.63 |
71 | passenger | burundi | https://www.passenger-coffee.de/shop/espressob... | burundi | so | NaN | cherry and red currant | 10.50 | 35.00 | 0.76 | 0.63 |
72 | passenger | cubano | https://www.passenger-coffee.de/shop/espressob... | cuba | so | NaN | milk chocolate, complemented with hints of nut... | 10.50 | 35.00 | 0.76 | 0.63 |
73 | flying roasters | nightingale | https://www.flyingroasters.de/en/shop/nighting... | honduras, guatemala, india | blend | (mixed) | fruity notes paired with bitter chocolate and ... | 8.20 | 31.30 | 0.59 | 0.56 |
74 | flying roasters | blackcap | https://www.flyingroasters.de/en/shop/blackcap... | peru, guatemala, sumatra | blend | NaN | chocolate and cocoa with notes of black currant | 8.20 | 31.30 | 0.59 | 0.56 |
75 | flying roasters | hummingbird | https://www.flyingroasters.de/en/shop/hummingb... | peru | so | washed | red berries aromas, sweet with nuts and nougat | 8.30 | 31.70 | 0.60 | 0.57 |
76 | flying roasters | pearl kite | https://www.flyingroasters.de/en/shop/pearl-ki... | honduras | blend | (mixed) | cherry-cognac and lots of nougat | 8.30 | 33.20 | 0.60 | 0.60 |
77 | flying roasters | jocotoco | https://www.flyingroasters.de/en/shop/espresso... | colombia | so | washed | caramel and orange notes | 8.30 | 33.20 | 0.60 | 0.60 |
78 | flying roasters | napcap | https://www.flyingroasters.de/en/shop/napcap/ | peru, guatemala, sumatra | blend | NaN | chocolate and cocoa with notes of black currant | 8.90 | 35.60 | 0.64 | 0.64 |
79 | nano kaffee | nano pleasure | https://nano-kaffee.de/products/nano-pleasure-... | brazil, colombia | blend | (mixed) | nougat, cocoa and sweet | 10.50 | 34.00 | 0.76 | 0.61 |
80 | nano kaffee | o passaro | https://nano-kaffee.de/products/brasil-o-passa... | brazil | so | natural | dark chocolate, nutty and berry | 12.90 | 36.00 | 0.93 | 0.65 |
81 | nano kaffee | fabrica de nubes | https://nano-kaffee.de/products/colombia-fabri... | colombia | so | washed | chocolate with a slight sweetness from figs | 12.90 | 44.00 | 0.93 | 0.79 |
82 | nano kaffee | kabira | https://nano-kaffee.de/products/ethiopia-kabir... | ethiopia | so | natural | ripe mango and blueberries | 13.80 | 47.80 | 0.99 | 0.86 |
83 | nano kaffee | decaf | https://nano-kaffee.de/products/colombia-decaf | colombia | blend | (mixed) | dark chocolate, cherries and dates | 11.90 | 39.00 | 0.86 | 0.70 |
84 | nano kaffee | rio negro | https://nano-kaffee.de/products/guatemala-rio-... | guatemala | so | washed | red apple, sugar cane and dark chocolate | 12.90 | 39.00 | 0.93 | 0.70 |
85 | nano kaffee | gachatha aa | https://nano-kaffee.de/products/kenya-gachatha-aa | kenya | so | washed | green grapes, brown sugar | 15.80 | 55.90 | 1.14 | 1.01 |
split_countries = df['country'].str.split(',')
all_countries = [country.strip().title() for sublist in split_countries.dropna() for country in sublist]
country_counts = pd.Series(all_countries).value_counts()
country_counts = country_counts.reset_index()
#country_counts
df_singleorigin = df[df['type'] == 'so']
fig = px.box(df_singleorigin, x='country', y='cpc_1kg', title='Distribution of Coffee Prices by Country (single origin only)')
fig.update_layout(xaxis_title='country', yaxis_title='cpc_1kg', xaxis_tickangle=-45)
fig.show()
cost per cup when buying 1kg bags
just checking which brands are more expensive, on average
shop_avg = df.groupby('shop')[['cpc_250g','cpc_1kg']].mean().round(2)
shop_avg = shop_avg.sort_values(by='cpc_1kg')
shop_avg = shop_avg.reset_index()
#shop_avg.dtypes
fig = px.bar(shop_avg, x='shop', y='cpc_1kg', title='Average cost per cup (when buying 1kg bags)', text_auto=True)
fig.show()
Single origin tends to be more expensive than blends, but how much more?
types = df.groupby('type')[['cpc_250g','cpc_1kg']].mean()
types = types.sort_values(by='cpc_250g')
types = types.reset_index()
types
type | cpc_250g | cpc_1kg | |
---|---|---|---|
0 | blend | 0.773500 | 0.676000 |
1 | so | 1.049545 | 0.924545 |
df_type = df
fig = px.box(df_type, x='type', y='cpc_1kg', title='Single origin vs blend')
fig.update_layout(xaxis_title='type', yaxis_title='cpc_1kg')
fig.show()
mean_price_per_type = types.groupby('type')['cpc_250g'].mean()
blend_price = mean_price_per_type['blend']
so_price = mean_price_per_type['so']
percentage_difference = ((so_price - blend_price) / blend_price) * 100
print("Single origin is {:.2f}% more expensive than Blend, on average.".format(percentage_difference))
Single origin is 35.69% more expensive than Blend, on average.
Natural and washed are by far the most common. Unless explicitely mentioned, all blends are usually a combination of natural and washed, and marked as (mixed).
process = df.groupby('process').agg({'process': 'count', 'cpc_250g': 'mean', 'cpc_1kg': 'mean'})
process.rename(columns={'process': 'count'}, inplace=True)
process = process.sort_values(by='count', ascending=False)
process = process.reset_index()
process
process | count | cpc_250g | cpc_1kg | |
---|---|---|---|---|
0 | washed | 33 | 1.053030 | 0.931212 |
1 | natural | 25 | 1.046800 | 0.925600 |
2 | (mixed) | 9 | 0.781111 | 0.692222 |
3 | honey | 5 | 1.116000 | 0.932000 |
4 | anaerobic | 2 | 1.200000 | 1.110000 |
5 | sugarcane | 1 | 0.860000 | 0.770000 |
df_process = df[df['type'] == 'so']
fig = px.box(df_process, x='process', y='cpc_1kg', title='Distribution of Coffee Prices by process (single origin only)')
fig.update_layout(xaxis_title='process', yaxis_title='cpc_1kg', xaxis_tickangle=-45)
fig.show()