Ich habe den folgenden DataFrame:
In [1]:
import pandas as pd
df = pd.DataFrame({'a': [1,2,3], 'b': [2,3,4], 'c':['dd','ee','ff'], 'd':[5,9,1]})
df
Out [1]:
a b c d
0 1 2 dd 5
1 2 3 ee 9
2 3 4 ff 1
Ich möchte eine Spalte 'e'
hinzufügen, die die Summe der Spalten 'a'
, 'b'
und 'd'
ist.
In Foren habe ich gelesen, dass so etwas funktionieren würde:
df['e'] = df[['a','b','d']].map(sum)
Aber nein!
Ich möchte die Operation mit der Liste der Spalten ['a','b','d']
und df
als Eingaben realisieren.
Sie können einfach sum
und den Parameter axis=1
setzen, um die Zeilen zu summieren, dabei werden nicht numerische Spalten ignoriert:
In [91]:
df = pd.DataFrame({'a': [1,2,3], 'b': [2,3,4], 'c':['dd','ee','ff'], 'd':[5,9,1]})
df['e'] = df.sum(axis=1)
df
Out[91]:
a b c d e
0 1 2 dd 5 8
1 2 3 ee 9 14
2 3 4 ff 1 8
Wenn Sie nur bestimmte Spalten summieren wollen, können Sie eine Liste der Spalten erstellen und diejenigen entfernen, an denen Sie nicht interessiert sind:
In [98]:
col_list= list(df)
col_list.remove('d')
col_list
Out[98]:
['a', 'b', 'c']
In [99]:
df['e'] = df[col_list].sum(axis=1)
df
Out[99]:
a b c d e
0 1 2 dd 5 3
1 2 3 ee 9 5
2 3 4 ff 1 7
Wenn Sie nur ein paar Spalten zu summieren haben, können Sie schreiben:
df['e'] = df['a'] + df['b'] + df['d']
Dies erzeugt eine neue Spalte e
mit den Werten:
a b c d e
0 1 2 dd 5 8
1 2 3 ee 9 14
2 3 4 ff 1 8
Für längere Spaltenlisten ist EdChum's Antwort vorzuziehen.
Dies ist eine einfachere Methode, bei der iloc verwendet wird, um die zu summierenden Spalten auszuwählen:
df['f']=df.iloc[:,0:2].sum(axis=1)
df['g']=df.iloc[:,[0,1]].sum(axis=1)
df['h']=df.iloc[:,[0,3]].sum(axis=1)
Erzeugt:
a b c d e f g h
0 1 2 dd 5 8 3 3 6
1 2 3 ee 9 14 5 5 11
2 3 4 ff 1 8 7 7 4
Ich kann keine Möglichkeit finden, einen Bereich und bestimmte Spalten zu kombinieren, die z. B. wie folgt funktioniert:
df['i']=df.iloc[:,[[0:2],3]].sum(axis=1)
df['i']=df.iloc[:,[0:2,3]].sum(axis=1)