web-dev-qa-db-ja.com

パンダ:最後の列なしで複数の列を1つの列にまとめる

これに似たデータフレームがある場合

Apples   Bananas   Grapes   Kiwis
2        3         nan      1
1        3         7        nan
nan      nan       2        3

このような列を追加したい

Apples   Bananas   Grapes   Kiwis   Fruit Total
2        3         nan      1        6
1        3         7        nan      11
nan      nan       2        3        5

df['Apples'] + df['Bananas']などを使用できると思いますが、実際のデータフレームはこれよりはるかに大きくなります。 df['Fruit Total']=df[-4:-1].sumのような式が1行のコードでこのトリックを行えることを望んでいました。しかし、それはうまくいきませんでした。すべての列を明示的に合計せずにそれを行う方法はありますか?

25
Tuutsrednas

最初に iloc で選択し、次に sum で選択できます。

df['Fruit Total']= df.iloc[:, -4:-1].sum(axis=1)
print (df)
   Apples  Bananas  Grapes  Kiwis  Fruit Total
0     2.0      3.0     NaN    1.0          5.0
1     1.0      3.0     7.0    NaN         11.0
2     NaN      NaN     2.0    3.0          2.0

すべての列を合計するには、次を使用します。

df['Fruit Total']= df.sum(axis=1)
24
jezrael

元のdfに対してdf['Fruit Total']= df.iloc[:, -4:-1].sum(axis=1)を使用しても、最後の列( 'Kiwis')は追加されません。df.iloc[:, -4:]代わりに、すべての列を選択します。

print(df)
   Apples  Bananas  Grapes  Kiwis
0     2.0      3.0     NaN    1.0
1     1.0      3.0     7.0    NaN
2     NaN      NaN     2.0    3.0

df['Fruit Total']=df.iloc[:,-4:].sum(axis=1)

print(df)
   Apples  Bananas  Grapes  Kiwis  Fruit Total
0     2.0      3.0     NaN    1.0          6.0
1     1.0      3.0     7.0    NaN         11.0
2     NaN      NaN     2.0    3.0          5.0
6
Francisco Dura