web-dev-qa-db-fra.com

Ajouter la colonne à pandas dataframe

C'est probablement facile, mais j'ai les données suivantes:

Dans la trame de données 1:

index dat1
0     9
1     5

Dans la trame de données 2:

index dat2
0     7
1     6

Je veux un bloc de données avec le formulaire suivant:

index dat1  dat2
0     9     7
1     5     6

J'ai essayé d'utiliser la méthode append, mais j'obtiens une jointure croisée (c'est-à-dire un produit cartésien).

Quelle est la bonne façon de faire cela?

80
BenDundee

Il semble en général que vous cherchiez simplement une jointure:

> dat1 = pd.DataFrame({'dat1': [9,5]})
> dat2 = pd.DataFrame({'dat2': [7,6]})
> dat1.join(dat2)
   dat1  dat2
0     9     7
1     5     6
94
U2EF1

Vous pouvez aussi utiliser:

dat1 = pd.concat([dat1, dat2], axis=1)
45
Ella Cohen

Les deux méthodes join () et concat () pourraient résoudre le problème. Cependant, il y a un avertissement que je dois mentionner: Réinitialisez l'index avant de vous joindre ou concattez si vous essayez de gérer un cadre de données en sélectionnant des lignes dans un autre DataFrame.

Un exemple ci-dessous montre un comportement intéressant de jointure et concatte:

dat1 = pd.DataFrame({'dat1': range(4)})
dat2 = pd.DataFrame({'dat2': range(4,8)})
dat1.index = [1,3,5,7]
dat2.index = [2,4,6,8]

# way1 join 2 DataFrames
print(dat1.join(dat2))
# output
   dat1  dat2
1     0   NaN
3     1   NaN
5     2   NaN
7     3   NaN

# way2 concat 2 DataFrames
print(pd.concat([dat1,dat2],axis=1))
#output
   dat1  dat2
1   0.0   NaN
2   NaN   4.0
3   1.0   NaN
4   NaN   5.0
5   2.0   NaN
6   NaN   6.0
7   3.0   NaN
8   NaN   7.0

#reset index 
dat1 = dat1.reset_index(drop=True)
dat2 = dat2.reset_index(drop=True)
#both 2 ways to get the same result

print(dat1.join(dat2))
   dat1  dat2
0     0     4
1     1     5
2     2     6
3     3     7


print(pd.concat([dat1,dat2],axis=1))
   dat1  dat2
0     0     4
1     1     5
2     2     6
3     3     7
28
Jeremy Z