J'ai deux séries s1
et s2
avec les mêmes indices (non consécutifs). Comment puis-je combiner s1
et s2
devenir deux colonnes dans un DataFrame et conserver l'un des index comme troisième colonne?
278
Je pense que concat
c'est une bonne façon de le faire. S'ils sont présents, il utilise les attributs de nom de la série comme colonnes (sinon il les numérote simplement):
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
Remarque: Cela s'étend à plus de 2 séries.
pd.concat([list_of_dataframes])
vs concaténer plusieurs foisnew_df = pd.DataFrame(); for df in list_of_dsf: new_df = pd.concat([new_df, df])
ou similaire.Pourquoi n'utilisez-vous pas simplement .to_frame si les deux ont les mêmes index?
> =
v0.23
<
v0.23
la source
Les pandas aligneront automatiquement ceux-ci passés en série et créeront l'index conjoint. Ils se trouvent être les mêmes ici.
reset_index
déplace l'index vers une colonne.la source
Exemple de code:
Pandas vous permet de créer un à
DataFrame
partir d'undict
avecSeries
comme valeurs et les noms de colonnes comme clés. Lorsqu'il trouve un enSeries
tant que valeur, il utilise l'Series
index comme partie de l'DataFrame
index. Cet alignement des données est l'un des principaux avantages des Pandas. Par conséquent, à moins que vous n'ayez d'autres besoins, la nouvelle créationDataFrame
a une valeur dupliquée. Dans l'exemple ci-dessus,data['idx_col']
a les mêmes données quedata.index
.la source
Si je peux répondre à cela.
Les principes fondamentaux de la conversion de séries en trames de données sont de comprendre que
1. Au niveau conceptuel, chaque colonne du bloc de données est une série.
2. Et, chaque nom de colonne est un nom de clé qui correspond à une série.
Si vous gardez à l'esprit deux concepts, vous pouvez penser à de nombreuses façons de convertir des séries en bloc de données. Une solution simple sera comme ceci:
Créez deux séries ici
Créez un bloc de données vide avec juste les noms de colonnes souhaités
Mettre la valeur de la série dans le bloc de données en utilisant le concept de mappage
Vérifiez les résultats maintenant
la source
Je ne suis pas sûr de bien comprendre votre question, mais est-ce ce que vous voulez faire?
(
index=s1.index
n'est même pas nécessaire ici)la source
Une simplification de la solution basée sur
join()
:la source
J'ai utilisé des pandas pour convertir mon tableau ou iseries numpy en une trame de données, puis j'ai ajouté et ajouté la colonne supplémentaire par clé en tant que «prédiction». Si vous avez besoin que la trame de données soit reconvertie en liste, utilisez values.tolist ()
la source