2017-06-09 9 views
1

これは私は、同じ行の他の列にある行に対して1つの列の値を移動するために使用する現在のコードである:は別の列に1つの列値を移動 - パンダ

#Move 2014/15 column ValB to column ValA 
df.loc[(df.Survey_year == 2014), 'ValA'] = df.loc[(df.Survey_year == 2014), 'ValB'] 

Iは同じ.LOCを行います[ ] 2015年を除いてもう一度。これは機能しますが、私はしません これを行うには多くの値を持つ大きな データフレームを使用している場合、これを行うのが最も効率的な方法だと思います。

答えて

3

類似していますが、はるかに単純なロジックです。 np.whereでは、if文と同様のExcelを定義することができます。 (x = yの場合はtrue、そうでない場合はfalse)。

import numpy as np 

df['ValA'] = np.where((df.Survey_year == 2014) | (df.Survey_year == 2015), df['ValB'], df['ValA']) 
+0

おかげで、私はエラーを取得していますが:ValueErrorを:シリーズの真理値があいまいです。 a.empty、a.bool()、a.item()、a.any()またはa.all()を使用します。どうすればこの問題を解決できますか?編集:私はまたはを変更しました| – Tom

+0

申し訳ありませんが、あなたは正しいですか、または、Pythonのためであり、シリーズやデータフレームを比較するのではありません。私は編集します –

4

クリーンオプション

mask = df.Survey_year.isin([2014, 2015]) 
df.loc[mask, 'ValA'] = df.loc[mask, 'ValB'] 

fastオプション

mask = np.in1d(df.Survey_year.values, [2014, 2015]) 
bloc = df.index.get_loc('ValB') 
v = df.values 
df.loc[mask, 'ValA'] = v[mask, bloc] 
関連する問題