from datetime import datetime
print(f'Päivitetty {datetime.now().date()} / Aki Taanila')
Päivitetty 2024-02-08 / Aki Taanila
Vierekkäin yhdistettävissä datoissa täytyy molemmissa olla indeksi, jonka arvojen perusteella rivit asettuvat kohdakkain.
Allekkain yhdistettävissä datoissa saman nimiset muuttujat asettuvat kohdakkain.
import pandas as pd
# Avaan yhdistettävät datat
df1 = pd.read_excel('https://taanila.fi/data1.xlsx')
df2 = pd.read_excel('https://taanila.fi/data1_s.xlsx')
# Data, johon yhdistetään sairaspoissaolot
df1
nro | sukup | ikä | perhe | koulutus | palveluv | palkka | johto | työtov | työymp | palkkat | työteht | työterv | lomaosa | kuntosa | hieroja | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 1 | 38 | 1 | 1.0 | 22.0 | 3587 | 3 | 3.0 | 3 | 3 | 3 | NaN | NaN | NaN | NaN |
1 | 2 | 1 | 29 | 2 | 2.0 | 10.0 | 2963 | 1 | 5.0 | 2 | 1 | 3 | NaN | NaN | NaN | NaN |
2 | 3 | 1 | 30 | 1 | 1.0 | 7.0 | 1989 | 3 | 4.0 | 1 | 1 | 3 | 1.0 | NaN | NaN | NaN |
3 | 4 | 1 | 36 | 2 | 1.0 | 14.0 | 2144 | 3 | 3.0 | 3 | 3 | 3 | 1.0 | NaN | NaN | NaN |
4 | 5 | 1 | 24 | 1 | 2.0 | 4.0 | 2183 | 2 | 3.0 | 2 | 1 | 2 | 1.0 | NaN | NaN | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
77 | 78 | 1 | 22 | 1 | 3.0 | 0.0 | 1598 | 4 | 4.0 | 4 | 3 | 4 | NaN | 1.0 | 1.0 | NaN |
78 | 79 | 1 | 33 | 1 | 1.0 | 2.0 | 1638 | 1 | 3.0 | 2 | 1 | 2 | 1.0 | NaN | NaN | NaN |
79 | 80 | 1 | 27 | 1 | 2.0 | 7.0 | 2612 | 3 | 4.0 | 3 | 3 | 3 | 1.0 | NaN | 1.0 | NaN |
80 | 81 | 1 | 35 | 2 | 2.0 | 16.0 | 2808 | 3 | 4.0 | 3 | 3 | 3 | NaN | NaN | NaN | NaN |
81 | 82 | 2 | 35 | 2 | 3.0 | 15.0 | 2183 | 3 | 4.0 | 4 | 3 | 4 | 1.0 | NaN | NaN | NaN |
82 rows × 16 columns
# Sairaspoissaolot
# nro-sarakkeen tiedot vastaavat toisiaan: esim. nro 6 vastaa henkilöä,
# jonka nro on 6 myös df1:ssä
df2
nro | sairaspoissaolot | |
---|---|---|
0 | 6 | 20 |
1 | 7 | 1 |
2 | 8 | 7 |
3 | 45 | 5 |
4 | 46 | 4 |
5 | 47 | 2 |
6 | 48 | 0 |
7 | 49 | 5 |
8 | 50 | 0 |
# Siirrän nro-muuttujan arvot indeksiin
df1 = df1.set_index('nro')
df2 = df2.set_index('nro')
# Varmistan, että nro:n siirto indeksiin onnnistui
df1
sukup | ikä | perhe | koulutus | palveluv | palkka | johto | työtov | työymp | palkkat | työteht | työterv | lomaosa | kuntosa | hieroja | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
nro | |||||||||||||||
1 | 1 | 38 | 1 | 1.0 | 22.0 | 3587 | 3 | 3.0 | 3 | 3 | 3 | NaN | NaN | NaN | NaN |
2 | 1 | 29 | 2 | 2.0 | 10.0 | 2963 | 1 | 5.0 | 2 | 1 | 3 | NaN | NaN | NaN | NaN |
3 | 1 | 30 | 1 | 1.0 | 7.0 | 1989 | 3 | 4.0 | 1 | 1 | 3 | 1.0 | NaN | NaN | NaN |
4 | 1 | 36 | 2 | 1.0 | 14.0 | 2144 | 3 | 3.0 | 3 | 3 | 3 | 1.0 | NaN | NaN | NaN |
5 | 1 | 24 | 1 | 2.0 | 4.0 | 2183 | 2 | 3.0 | 2 | 1 | 2 | 1.0 | NaN | NaN | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
78 | 1 | 22 | 1 | 3.0 | 0.0 | 1598 | 4 | 4.0 | 4 | 3 | 4 | NaN | 1.0 | 1.0 | NaN |
79 | 1 | 33 | 1 | 1.0 | 2.0 | 1638 | 1 | 3.0 | 2 | 1 | 2 | 1.0 | NaN | NaN | NaN |
80 | 1 | 27 | 1 | 2.0 | 7.0 | 2612 | 3 | 4.0 | 3 | 3 | 3 | 1.0 | NaN | 1.0 | NaN |
81 | 1 | 35 | 2 | 2.0 | 16.0 | 2808 | 3 | 4.0 | 3 | 3 | 3 | NaN | NaN | NaN | NaN |
82 | 2 | 35 | 2 | 3.0 | 15.0 | 2183 | 3 | 4.0 | 4 | 3 | 4 | 1.0 | NaN | NaN | NaN |
82 rows × 15 columns
# Varmistan, että nro:n siirto indeksiin onnnistui
df2
sairaspoissaolot | |
---|---|
nro | |
6 | 20 |
7 | 1 |
8 | 7 |
45 | 5 |
46 | 4 |
47 | 2 |
48 | 0 |
49 | 5 |
50 | 0 |
# Yhdistän df1 ja df2 vierekkäin (axis=1 merkitsee vierekkäin yhdistämistä)
df3 = pd.concat([df1, df2], axis=1)
# Varmistan yhdistämisen onnistumisen
df3.head(10)
sukup | ikä | perhe | koulutus | palveluv | palkka | johto | työtov | työymp | palkkat | työteht | työterv | lomaosa | kuntosa | hieroja | sairaspoissaolot | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
nro | ||||||||||||||||
1 | 1 | 38 | 1 | 1.0 | 22.0 | 3587 | 3 | 3.0 | 3 | 3 | 3 | NaN | NaN | NaN | NaN | NaN |
2 | 1 | 29 | 2 | 2.0 | 10.0 | 2963 | 1 | 5.0 | 2 | 1 | 3 | NaN | NaN | NaN | NaN | NaN |
3 | 1 | 30 | 1 | 1.0 | 7.0 | 1989 | 3 | 4.0 | 1 | 1 | 3 | 1.0 | NaN | NaN | NaN | NaN |
4 | 1 | 36 | 2 | 1.0 | 14.0 | 2144 | 3 | 3.0 | 3 | 3 | 3 | 1.0 | NaN | NaN | NaN | NaN |
5 | 1 | 24 | 1 | 2.0 | 4.0 | 2183 | 2 | 3.0 | 2 | 1 | 2 | 1.0 | NaN | NaN | NaN | NaN |
6 | 2 | 31 | 2 | 2.0 | 14.0 | 1910 | 4 | 4.0 | 5 | 2 | 4 | 1.0 | 1.0 | NaN | NaN | 20.0 |
7 | 1 | 49 | 1 | 2.0 | 16.0 | 2066 | 3 | 5.0 | 4 | 2 | 2 | NaN | NaN | 1.0 | NaN | 1.0 |
8 | 1 | 55 | 1 | 1.0 | 0.0 | 2066 | 3 | 5.0 | 3 | 1 | 3 | 1.0 | NaN | NaN | NaN | 7.0 |
9 | 1 | 40 | 2 | 1.0 | 23.0 | 2768 | 2 | 4.0 | 4 | 2 | 4 | NaN | 1.0 | NaN | NaN | NaN |
10 | 1 | 33 | 1 | 1.0 | 16.0 | 2106 | 3 | 2.0 | 1 | 1 | 1 | 1.0 | NaN | NaN | NaN | NaN |
# data1_add.xlsx sisältää tietoja, jotka haluan lisätä df3:n perään
df4 = pd.read_excel('http://taanila.fi/data1_add.xlsx')
# Siirrän nro-muuttujan arvot indeksiin
df4 = df4.set_index('nro')
df4
sukup | ikä | perhe | koulutus | palveluv | palkka | johto | työtov | työymp | palkkat | työteht | työterv | lomaosa | kuntosa | hieroja | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
nro | |||||||||||||||
83 | 2 | 31 | 2 | 3 | 1 | 2800 | 4 | 4 | 4 | 3 | 3 | 1 | NaN | NaN | 1.0 |
84 | 1 | 26 | 1 | 2 | 0 | 2500 | 5 | 4 | 3 | 2 | 5 | 1 | NaN | NaN | NaN |
85 | 1 | 32 | 2 | 2 | 0 | 2500 | 5 | 3 | 2 | 2 | 3 | 1 | NaN | 1.0 | NaN |
86 | 1 | 40 | 1 | 2 | 0 | 2500 | 3 | 4 | 3 | 2 | 3 | 1 | NaN | 1.0 | NaN |
87 | 1 | 31 | 1 | 4 | 1 | 3500 | 4 | 4 | 3 | 3 | 3 | 1 | NaN | 1.0 | NaN |
88 | 1 | 28 | 1 | 4 | 0 | 4600 | 4 | 3 | 2 | 4 | 2 | 1 | NaN | NaN | NaN |
89 | 1 | 29 | 1 | 4 | 0 | 3900 | 4 | 3 | 3 | 4 | 3 | 1 | NaN | NaN | NaN |
90 | 2 | 31 | 2 | 2 | 0 | 2400 | 4 | 3 | 2 | 2 | 3 | 1 | NaN | 1.0 | NaN |
# Yhdistän df3 ja df4 allekkain
df5 = pd.concat([df3, df4])
df5
sukup | ikä | perhe | koulutus | palveluv | palkka | johto | työtov | työymp | palkkat | työteht | työterv | lomaosa | kuntosa | hieroja | sairaspoissaolot | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
nro | ||||||||||||||||
1 | 1 | 38 | 1 | 1.0 | 22.0 | 3587 | 3 | 3.0 | 3 | 3 | 3 | NaN | NaN | NaN | NaN | NaN |
2 | 1 | 29 | 2 | 2.0 | 10.0 | 2963 | 1 | 5.0 | 2 | 1 | 3 | NaN | NaN | NaN | NaN | NaN |
3 | 1 | 30 | 1 | 1.0 | 7.0 | 1989 | 3 | 4.0 | 1 | 1 | 3 | 1.0 | NaN | NaN | NaN | NaN |
4 | 1 | 36 | 2 | 1.0 | 14.0 | 2144 | 3 | 3.0 | 3 | 3 | 3 | 1.0 | NaN | NaN | NaN | NaN |
5 | 1 | 24 | 1 | 2.0 | 4.0 | 2183 | 2 | 3.0 | 2 | 1 | 2 | 1.0 | NaN | NaN | NaN | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
86 | 1 | 40 | 1 | 2.0 | 0.0 | 2500 | 3 | 4.0 | 3 | 2 | 3 | 1.0 | NaN | 1.0 | NaN | NaN |
87 | 1 | 31 | 1 | 4.0 | 1.0 | 3500 | 4 | 4.0 | 3 | 3 | 3 | 1.0 | NaN | 1.0 | NaN | NaN |
88 | 1 | 28 | 1 | 4.0 | 0.0 | 4600 | 4 | 3.0 | 2 | 4 | 2 | 1.0 | NaN | NaN | NaN | NaN |
89 | 1 | 29 | 1 | 4.0 | 0.0 | 3900 | 4 | 3.0 | 3 | 4 | 3 | 1.0 | NaN | NaN | NaN | NaN |
90 | 2 | 31 | 2 | 2.0 | 0.0 | 2400 | 4 | 3.0 | 2 | 2 | 3 | 1.0 | NaN | 1.0 | NaN | NaN |
90 rows × 16 columns
Data-analytiikka Pythonilla https://tilastoapu.wordpress.com/python/