J'ai deux séries Pandas, s1 et s2 que je voudrais combiner.

s1 = pd.Series([2,5,5], index=['a','b','c'])
s2 = pd.Series([2,4,7], index=['a','b','d'])

Voici le résultat que j'aimerais:

s3 = pd.Series([4,9,5,7], index=['a','b','c','d'])

a    4
b    9
c    5
d    7
dtype: int64

J'ai essayé l'opérateur +, s1.append(s2) et pd.join([s1,s2]) mais ceux-ci ne donnent pas le résultat que je recherche.

1
max 20 nov. 2018 à 20:04

5 réponses

Meilleure réponse

On dirait que add fonctionnera ici

s1.add(s2,fill_value=0)
Out[145]: 
a    4.0
b    9.0
c    5.0
d    7.0
dtype: float64
5
YOBEN_S 20 nov. 2018 à 17:07

Alternative à add

pd.concat((s1,s2), axis=1, sort=True).sum(1, min_count=1)

Production:

a    4.0
b    9.0
c    5.0
d    7.0
dtype: float64
0
Srce Cde 20 nov. 2018 à 17:11

Utilisez simplement pandas.Series.add

s3 = s1.add(s2, fill_value=0)

#result
a    4.0
b    9.0
c    5.0
d    7.0
dtype: float64
0
Drew Nicolette 20 nov. 2018 à 17:11

Numpy np.add.at

C'est un peu ridicule mais je voulais montrer quelque chose de différent

import numpy as np
import pandas as pd
from itertools import chain

k, v = zip(*chain(*map(pd.Series.items, [s1, s2])))
i, r = pd.factorize(k)
out = np.zeros(len(r), dtype=int)
np.add.at(out, i, v)
pd.Series(out, r)

a    4
b    9
c    5
d    7
dtype: int64
1
piRSquared 20 nov. 2018 à 17:23

Il y a une réponse simple Directement de pandas.Series.add, vous l'obtiendrez d'ici

Pour vous Cas d'utilisation ici ..

Première trame de données:

>>> s1
a    2
b    4
c    5
dtype: int64

Deuxième trame de données:

>>> s2
a    2
b    4
d    7
dtype: int64

Simple DataFrame.add + fill_value qui est expliqué dans la documentation:

>>> s1.add(s2, fill_value=0)
a    4.0
b    8.0
c    5.0
d    7.0
dtype: float64

Document:

fill_value: aucune ou valeur flottante, par défaut aucune

Remplissez les valeurs manquantes (NaN) existantes et tout nouvel élément nécessaire pour un alignement DataFrame réussi, avec cette valeur avant le calcul. Si les données des deux emplacements DataFrame correspondants sont manquantes, le résultat sera manquant

0
Karn Kumar 21 nov. 2018 à 03:20