web-dev-qa-db-fra.com

Python: créer une nouvelle colonne à partir de colonnes existantes

J'essaye de créer une nouvelle colonne basée sur les deux colonnes. Supposons que je veuille créer une nouvelle colonne z, et que ce soit la valeur de y lorsqu'elle n'est pas manquante et la valeur de x lorsque y est effectivement manquant. Donc, dans ce cas, je m'attends à ce que z soit [1, 8, 10, 8].

   x   y
0  1 NaN
1  2   8
2  4  10
3  8 NaN
11
Kexin Xu

La nouvelle colonne 'z' récupère ses valeurs dans la colonne 'y' en utilisant df['z'] = df['y']. Cela apporte les valeurs manquantes, alors remplissez-les en utilisant fillna en utilisant la colonne 'x'. Enchaînez ces deux actions:

>>> df['z'] = df['y'].fillna(df['x'])
>>> df
   x   y   z
0  1 NaN   1
1  2   8   8
2  4  10  10
3  8 NaN   8
18
Vidhya G

Vous pouvez utiliser apply avec l'option axis=1. Ensuite, votre solution est assez concise.

df[z] = df.apply(lambda row: row.y if pd.notnull(row.y) else row.x, axis=1)
16
Haleemur Ali

Utilisation np.where:

In [3]:

df['z'] = np.where(df['y'].isnull(), df['x'], df['y'])
df
Out[3]:
   x   y   z
0  1 NaN   1
1  2   8   8
2  4  10  10
3  8 NaN   8

Ici, il utilise la condition booléenne et si true renvoie df['x'] autre df['y']

4
EdChum

Supposons que DataFrame s'appelle df. Copiez d'abord la colonne y.

df["z"] = df["y"].copy()

Ensuite, définissez les emplacements nan de z aux emplacements en x où les nans sont en z.

import numpy as np
df.z[np.isnan(df.z)]=df.x[np.isnan(df.z)]


>>> df 
   x   y   z
0  1 NaN   1
1  2   8   8
2  4  10  10
3  8 NaN   8
1
Kyler Brown

Je ne sais pas si je comprends la question, mais est-ce ce que vous cherchez?

"if y [i]" sautera si la valeur est nulle.

for i in range(len(x));
    if y[i]:
        z.append(y[i])
    else:
        z.append(x[i])
0
Red Twoon

La méthode update fait presque exactement cela. La seule mise en garde est que update le fera en place, vous devez donc d'abord créer une copie:

df['z'] = df.x.copy()
df.z.update(df.y)

Dans l'exemple ci-dessus, vous commencez par x et remplacez chaque valeur par la valeur correspondante de y, tant que la nouvelle valeur n'est pas NaN.

0
ari