web-dev-qa-db-fra.com

Ajouter une nouvelle colonne dans Pandas DataFrame Python

J'ai dataframe dans les pandas par exemple:

Col1 Col2
A     1 
B     2
C     3

Maintenant, si je voudrais ajouter une colonne supplémentaire nommée Col3 et que la valeur est basée sur Col2. Dans la formule, si Col2> 1, alors Col3 est égal à 0, sinon égal à 1. Donc, dans l'exemple ci-dessus. La sortie serait:

Col1 Col2 Col3
A    1    1
B    2    0
C    3    0

Une idée sur comment y parvenir?

44
Santiago Munez

Vous venez de faire une comparaison opposée. if Col2 <= 1. Cela retournera une série booléenne avec des valeurs False pour celles supérieures à 1 et True pour l'autre. Si vous le convertissez en un type int64, True devient 1 et False devient 0,

df['Col3'] = (df['Col2'] <= 1).astype(int)

Si vous souhaitez une solution plus générale, où vous pouvez affecter un nombre quelconque à Col3 en fonction de la valeur de Col2, vous devez procéder comme suit:

df['Col3'] = df['Col2'].map(lambda x: 42 if x > 1 else 55)

Ou:

df['Col3'] = 0
condition = df['Col2'] > 1
df.loc[condition, 'Col3'] = 42
df.loc[~condition, 'Col3'] = 55
61
Viktor Kerkez

Le moyen le plus simple que j'ai trouvé pour ajouter une colonne à un DataFrame était d'utiliser la fonction "ajouter". Voici un extrait de code, également avec la sortie dans un fichier CSV. Notez que l'inclusion de l'argument "columns" vous permet de définir le nom de la colonne (qui correspond au nom du np.array que j'ai utilisé comme source des données).

#  now to create a PANDAS data frame
df = pd.DataFrame(data = FF_maxRSSBasal, columns=['FF_maxRSSBasal'])
# from here on, we use the trick of creating a new dataframe and then "add"ing it
df2 = pd.DataFrame(data = FF_maxRSSPrism, columns=['FF_maxRSSPrism'])
df = df.add( df2, fill_value=0 )
df2 = pd.DataFrame(data = FF_maxRSSPyramidal, columns=['FF_maxRSSPyramidal'])
df = df.add( df2, fill_value=0 )
df2 = pd.DataFrame(data = deltaFF_strainE22, columns=['deltaFF_strainE22'])
df = df.add( df2, fill_value=0 )
df2 = pd.DataFrame(data = scaled, columns=['scaled'])
df = df.add( df2, fill_value=0 )
df2 = pd.DataFrame(data = deltaFF_orientation, columns=['deltaFF_orientation'])
df = df.add( df2, fill_value=0 )
#print(df)
df.to_csv('FF_data_frame.csv')
0
Tony Rollett