Combiner deux séries en une base de données dans pandas
j'ai deux séries s1
et s2
avec les mêmes indices (non consécutifs). Comment puis-je combiner s1
et s2
pour être deux colonnes dans une base de données et garder un des indices comme une troisième colonne?
6 réponses
je pense concat
est une belle façon de le faire. S'ils sont présents, il utilise les attributs de nom de la Série comme les colonnes (sinon il simplement de numéros):
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
Note: Ceci s'applique à plus de 2 séries.
les Pandas aligneront automatiquement ceux passés en série et créeront l'index commun
Il se trouve qu'ils sont les mêmes ici. reset_index
déplace l'index à une colonne.
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
pourquoi tu ne l'utilises pas .to_frame si les deux ont les mêmes index?
a.to_frame().join(b.to_frame())
^^ Cela ne fonctionnera pas si vous essayez de "joindre" deux pandas serieses
exemple de code:
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})
Pandas vous permet de créer un DataFrame
à partir d'un dict
avec Series
comme les valeurs et les noms de colonne comme les clés. Lorsqu'elle trouve une valeur Series
, elle utilise l'indice Series
dans le cadre de l'indice DataFrame
. Cet alignement des données est l'un des principaux avantages de Pandas. Par conséquent, à moins que vous n'ayez d'autres besoins, le DataFrame
nouvellement créé a une valeur dupliquée. Dans l'exemple ci-dessus, data['idx_col']
a les mêmes données que data.index
.
une simplification de la solution basée sur join()
:
df = a.to_frame().join(b)
Je ne suis pas sûr de bien comprendre votre question, mais est-ce que c'est ce que vous voulez faire?
pd.DataFrame(data=dict(s1=s1, s2=s2), index=s1.index)
( index=s1.index
n'est même pas nécessaire ici)