from datetime import datetime
print(f'Päivitetty {datetime.now().date()} / Aki Taanila')
Päivitetty 2023-12-11 / Aki Taanila
Pivot-taulukoita luon pivot_table-funktiolla. Keskeisiä parametreja ovat
Jos lasket pelkästään lukumääriä ja/tai prosentteja, niin pivot_table-funktion sijasta kannattaa käyttää crosstab-funktiota, joka laskee oletuksena lukumääriä.
import pandas as pd
# Esimerkkidatana pienoismallien valmistajan saamia tilauksia
df = pd.read_excel('https://taanila.fi/pienoismallit.xlsx')
df
NRO | KAPPALEMÄÄRÄ | YKSIKKÖHINTA | HINTA | VUOSI | TUOTELINJA | TUOTENUMERO | MAA | TILAUKSEN_KOKO | |
---|---|---|---|---|---|---|---|---|---|
0 | 1 | 30 | 95.70 | 2871.00 | 2018 | Moottoripyörät | S10_1678 | USA | Pieni |
1 | 2 | 34 | 81.35 | 2765.90 | 2018 | Moottoripyörät | S10_1678 | France | Pieni |
2 | 3 | 41 | 94.74 | 3884.34 | 2018 | Moottoripyörät | S10_1678 | France | Keskikoko |
3 | 4 | 45 | 83.26 | 3746.70 | 2018 | Moottoripyörät | S10_1678 | USA | Keskikoko |
4 | 5 | 49 | 100.00 | 5205.27 | 2018 | Moottoripyörät | S10_1678 | USA | Keskikoko |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2818 | 2819 | 20 | 100.00 | 2244.40 | 2019 | Laivat | S72_3212 | Spain | Pieni |
2819 | 2820 | 29 | 100.00 | 3978.51 | 2020 | Laivat | S72_3212 | Finland | Keskikoko |
2820 | 2821 | 43 | 100.00 | 5417.57 | 2020 | Laivat | S72_3212 | Spain | Keskikoko |
2821 | 2822 | 34 | 62.24 | 2116.16 | 2020 | Laivat | S72_3212 | France | Pieni |
2822 | 2823 | 47 | 65.52 | 3079.44 | 2020 | Laivat | S72_3212 | USA | Keskikoko |
2823 rows × 9 columns
# Tilausten keskiarvohinta eri vuosina (oletuksena lasketaan keskiarvo)
df.pivot_table(values='HINTA', index='VUOSI').style.format(precision=0)
HINTA | |
---|---|
VUOSI | |
2018 | 3517 |
2019 | 3512 |
2020 | 3748 |
# Tilausten hinta yhteensä (sum) tuotelinjan mukaan
df.pivot_table(values='HINTA', index='TUOTELINJA', aggfunc='sum')\
.sort_values(by='HINTA', ascending=False).style.format(precision=0)
HINTA | |
---|---|
TUOTELINJA | |
Klassikko autot | 3919616 |
Vintage autot | 1903151 |
Moottoripyörät | 1166388 |
Rekat ja bussit | 1127790 |
Lentokoneet | 975004 |
Laivat | 714437 |
Junat | 226243 |
# Tilausten keskiarvohinta eri vuosina tuotelinjan mukaan
df.pivot_table(values='HINTA', index='TUOTELINJA', columns='VUOSI')\
.style.format(precision=0)\
.background_gradient(cmap='Reds', axis=None)
VUOSI | 2018 | 2019 | 2020 |
---|---|---|---|
TUOTELINJA | |||
Junat | 2600 | 3149 | 3076 |
Klassikko autot | 4057 | 3987 | 4230 |
Laivat | 3022 | 2969 | 3373 |
Lentokoneet | 3203 | 3122 | 3335 |
Moottoripyörät | 3403 | 3418 | 4051 |
Rekat ja bussit | 3822 | 3727 | 3634 |
Vintage autot | 2946 | 3209 | 3341 |
# Tilausten sisältämien kappalemäärien keskiarvo maan ja tuotelinjan mukaan
# Kunkin sarakkeen suurin ja pienin arvo korostettu
df.pivot_table(values='KAPPALEMÄÄRÄ', index='MAA', columns='TUOTELINJA').style.format(precision=0, na_rep='-')\
.highlight_max(color='lightgreen', axis=0)\
.highlight_min(color='pink', axis=0)
TUOTELINJA | Junat | Klassikko autot | Laivat | Lentokoneet | Moottoripyörät | Rekat ja bussit | Vintage autot |
---|---|---|---|---|---|---|---|
MAA | |||||||
Australia | 33 | 34 | 28 | 33 | 34 | 35 | 34 |
Austria | - | 37 | 28 | 33 | 39 | 41 | 32 |
Belgium | 32 | 37 | 31 | 41 | - | - | 32 |
Canada | - | 33 | 35 | 32 | 41 | 32 | 32 |
Denmark | 34 | 37 | 31 | 35 | - | 36 | 34 |
Finland | 44 | 34 | 35 | 35 | 34 | 35 | 36 |
France | 32 | 36 | 36 | 36 | 35 | 36 | 34 |
Germany | 44 | 36 | 28 | 31 | 40 | 40 | 31 |
Ireland | 25 | 34 | - | 29 | 29 | 37 | 28 |
Italy | 27 | 34 | 32 | 36 | 38 | 24 | 32 |
Japan | 24 | 39 | 42 | 34 | 34 | 34 | 35 |
Norway | 36 | 33 | - | 30 | 35 | 34 | 35 |
Philippines | - | 37 | - | 43 | 34 | - | 27 |
Singapore | 35 | 33 | 44 | - | 44 | 39 | 31 |
Spain | 36 | 36 | 36 | 37 | 41 | 37 | 35 |
Sweden | 32 | 32 | 37 | 35 | 44 | 39 | 32 |
Switzerland | - | 35 | - | - | - | - | - |
UK | 42 | 33 | 36 | 32 | 41 | 36 | 35 |
USA | 36 | 35 | 34 | 37 | 34 | 35 | 37 |
# Tilausten hinnan keskiarvo, summa ja tilausten lukumäärä tuotelinjan mukaan
df1 = df.pivot_table(values='HINTA', index='TUOTELINJA', aggfunc=['mean', 'sum', len])
# Sarakeotsikot
df1.columns = ['Keskiarvo', 'Yhteensä', 'Lukumäärä']
df1.style.format(precision=0).background_gradient(cmap='Reds', axis=0)
Keskiarvo | Yhteensä | Lukumäärä | |
---|---|---|---|
TUOTELINJA | |||
Junat | 2938 | 226243 | 77 |
Klassikko autot | 4053 | 3919616 | 967 |
Laivat | 3053 | 714437 | 234 |
Lentokoneet | 3186 | 975004 | 306 |
Moottoripyörät | 3524 | 1166388 | 331 |
Rekat ja bussit | 3747 | 1127790 | 301 |
Vintage autot | 3135 | 1903151 | 607 |
# Tunnuslukuja vuoden ja tuotelinjan mukaan
df.pivot_table(values='HINTA', index=['VUOSI', 'TUOTELINJA'], aggfunc=['min', 'median', 'max'])\
.style.format(precision=0)
min | median | max | ||
---|---|---|---|---|
HINTA | HINTA | HINTA | ||
VUOSI | TUOTELINJA | |||
2018 | Junat | 972 | 2447 | 5344 |
Klassikko autot | 717 | 3807 | 11279 | |
Laivat | 1134 | 2897 | 6341 | |
Lentokoneet | 876 | 2949 | 7484 | |
Moottoripyörät | 1036 | 3026 | 9265 | |
Rekat ja bussit | 1104 | 3585 | 7083 | |
Vintage autot | 710 | 2571 | 7956 | |
2019 | Junat | 1056 | 2471 | 6491 |
Klassikko autot | 813 | 3629 | 11624 | |
Laivat | 1089 | 2819 | 6960 | |
Lentokoneet | 949 | 2818 | 8160 | |
Moottoripyörät | 652 | 3000 | 9774 | |
Rekat ja bussit | 728 | 3410 | 8844 | |
Vintage autot | 578 | 2922 | 12536 | |
2020 | Junat | 1193 | 2218 | 8977 |
Klassikko autot | 640 | 3880 | 12001 | |
Laivat | 1463 | 3167 | 6397 | |
Lentokoneet | 1122 | 2878 | 10067 | |
Moottoripyörät | 733 | 3749 | 11887 | |
Rekat ja bussit | 482 | 3160 | 8498 | |
Vintage autot | 541 | 3029 | 14083 |
Data-analytiikka Pythonilla https://tilastoapu.wordpress.com/python/