web-dev-qa-db-fra.com

Créer une nouvelle colonne dans le cadre de données Panda en ajoutant des valeurs d'autres colonnes

J'ai un dataframe avec des valeurs comme

A B
1 4
2 6
3 9

J'ai besoin d'ajouter une nouvelle colonne en ajoutant les valeurs des colonnes A et B, comme

A B C
1 4 5
2 6 8
3 9 12

Je crois que cela peut être fait en utilisant la fonction lambda, mais je ne vois pas comment le faire.

37
n00b

Très simple:

df['C'] = df['A'] + df['B']
58
DeepSpace

Le moyen le plus simple serait d'utiliser DeepSpace answer. Cependant, si vous voulez vraiment utiliser une fonction anonyme, vous pouvez utiliser apply:

df['C'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
36
efajardo

Vous pouvez utiliser la fonction sum pour y parvenir, comme le mentionne @EdChum dans le commentaire:

df['C'] =  df[['A', 'B']].sum(axis=1)

In [245]: df
Out[245]: 
   A  B   C
0  1  4   5
1  2  6   8
2  3  9  12
24
Anton Protopopov

En construisant un peu plus sur la réponse d'Anton, vous pouvez ajouter toutes les colonnes comme ceci:

df['sum'] = df[list(df.columns)].sum(axis=1)
19
sparrow

À partir de Pandas version 0.16.0, vous pouvez utiliser assign comme suit:

df = pd.DataFrame({"A": [1,2,3], "B": [4,6,9]})
df.assign(C = df.A + df.B)

# Out[383]: 
#    A  B   C
# 0  1  4   5
# 1  2  6   8
# 2  3  9  12

Vous pouvez ajouter plusieurs colonnes de cette façon comme suit:

df.assign(C = df.A + df.B,
          Diff = df.B - df.A,
          Mult = df.A * df.B)
# Out[379]: 
#    A  B   C  Diff  Mult
# 0  1  4   5     3     4
# 1  2  6   8     4    12
# 2  3  9  12     6    27
6
steveb

Vous pourriez faire:

df['C'] = df.sum(axis=1)

Si vous voulez seulement faire des valeurs numériques:

df['C'] = df.sum(axis=1, numeric_only=True)
5
Manuel Martinez

Peut faire en utilisant loc

In [37]:  df = pd.DataFrame({"A":[1,2,3],"B":[4,6,9]})

In [38]: df
Out[38]:
   A  B
0  1  4
1  2  6
2  3  9

In [39]: df['C']=df.loc[:,['A','B']].sum(axis=1)

In [40]: df
Out[40]:
   A  B   C
0  1  4   5
1  2  6   8
2  3  9  12
1
Roushan

Je voulais ajouter un commentaire en réponse au message d'erreur que n00b recevait, mais je n'ai pas assez de réputation. Donc, mon commentaire est une réponse au cas où cela aiderait quelqu'un ...

n00b a dit:

Je reçois l'avertissement suivant: Une valeur tente d'être définie sur la copie d'une tranche d'un DataFrame. Essayez plutôt d'utiliser .loc [row_indexer, col_indexer] = =

Il a eu cette erreur parce que, quelles que soient les manipulations qu'il avait effectuées sur son cadre de données avant de créer df['C'], il créait une vue dans le cadre de données plutôt qu'une copie de celle-ci. L'erreur ne provient pas du simple calcul df['C'] = df['A'] + df['B'] suggéré par DeepSpace.

Jetez un coup d'œil à la Retour d'une vue par rapport à une copie docs.

1
tgraybam

Concernant le commentaire de n00b: "Je reçois l'avertissement suivant: Une valeur tente d'être définie sur une copie d'une tranche d'un DataFrame. Essayez d'utiliser .loc [index_ligne, index_col] = valeur"

J'avais la même erreur. Dans mon cas, c’est parce que j’essayais d’ajouter des colonnes à un cadre de données créé comme suit:

df_b = df[['colA', 'colB', 'colC']]

au lieu de:

df_c = pd.DataFrame(df, columns=['colA', 'colB', 'colC'])

df_b est une copie d'une tranche de df
df_c est une nouvelle base de données. Alors

df_c['colD'] = df['colA'] + df['colB']+ df['colC']

ajoutera les colonnes et ne déclenchera aucun avertissement. Identique si .sum (axe = 1) est utilisé.

0
firefly