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?

174
demandé sur jezrael 2013-08-05 19:37:39

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.

265
répondu Andy Hayden 2013-08-05 15:57:31

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
26
répondu Jeff 2013-08-05 15:53:14

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

15
répondu swmfg 2018-02-26 10:29:42

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 .

6
répondu jbn 2013-08-05 15:50:25

une simplification de la solution basée sur join() :

df = a.to_frame().join(b)
2
répondu Lorenzo A. Rossi 2018-01-16 00:50:26

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)

1
répondu Bertrand L 2015-12-23 10:42:41