Am două Serii " s1 " și " s2 " cu aceeași (non-consecutiv) indici. Cum combina " s1 " și " s2 " a fi două coloane într-o DataFrame și să păstreze unul dintre indicii ca o a treia coloană?
Cred că concat
este un mod frumos de a face acest lucru. Dacă acestea sunt prezente, se folosește numele de atribute din Seria drept coloane (în caz contrar, pur și simplu numerele de ele):
In [1]: s1 = pd.Series([1, 2], index=['A', 'B'], name='s1')
In [2]: s2 = pd.Series([3, 4], index=['A', 'B'], name='s2')
In [3]: pd.concat([s1, s2], axis=1)
Out[3]:
s1 s2
A 1 3
B 2 4
In [4]: pd.concat([s1, s2], axis=1).reset_index()
Out[4]:
index s1 s2
0 A 1 3
1 B 2 4
Notă: Acest lucru se extinde la mai mult de 2 Serii.
Panda va alinia automat aceste a trecut în serie și de a crea indicele comun
Se întâmplă să fie la fel și aici. reset_index
se mută la index pentru o coloană.
In [2]: s1 = Series(randn(5),index=[1,2,4,5,6])
In [4]: s2 = Series(randn(5),index=[1,2,4,5,6])
In [8]: DataFrame(dict(s1 = s1, s2 = s2)).reset_index()
Out[8]:
index s1 s2
0 1 -0.176143 0.128635
1 2 -1.286470 0.908497
2 4 -0.995881 0.528050
3 5 0.402241 0.458870
4 6 0.380457 0.072251
Exemplu de cod:
a = pd.Series([1,2,3,4], index=[7,2,8,9])
b = pd.Series([5,6,7,8], index=[7,2,8,9])
data = pd.DataFrame({'a': a,'b':b, 'idx_col':a.index})
Panda vă permite să creați o DataFrame "dintr-o" dict
cu "Serie", ca și valorile coloanei nume ca cheile. Atunci când se constată o "Serie", ca o valoare, se folosește "Serie" index ca parte a DataFrame
index. Această aliniere a datelor este unul dintre principalele avantaje de ursi Panda. Prin urmare, dacă nu ai alte nevoi, proaspăt creat DataFrame
a dublat valoarea. În exemplul de mai sus, datele['idx_col']a aceleași date ca date.index
.
Dacă am putea răspunde la această.
Fundamentele spatele conversie seria de la cadru de date este de a înțelege că
1. La nivel conceptual, fiecare coloană în cadru de date este o serie.
2. Și, de fiecare nume de coloană este un nume de cheie care se mapează la o serie.
Dacă vă păstrați de mai sus două concepte în minte, vă puteți gândi de mai multe moduri de a converti seria de la cadru de date. O soluție ușor va fi ca aceasta:
Creați două serii de aici
import pandas as pd
series_1 = pd.Series(list(range(10)))
series_2 = pd.Series(list(range(20,30)))
Creați un gol cadru de date cu nume de coloane dorit
df = pd.DataFrame(columns = ['Column_name#1', 'Column_name#1'])
Pune seria de valoare în interiorul cadru de date folosind conceptul de cartografiere
df['Column_name#1'] = series_1
df['Column_name#2'] = series_2
Verificați rezultatele acum
df.head(5)
Nu sigur că am înțeles bine întrebarea ta, dar asta este ceea ce vrei să faci?
pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index)
(index=s1.index
nu este chiar necesar aici)
O simplificare a soluției bazate pe join()`:
df = a.to_frame().join(b)