2017-06-09 17 views
1

這是當前的代碼,我用它來針對特定行移動一列的值,另一列在同一行:一個值移動到另一列 - 熊貓

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

我做同樣的.loc [ ]除了2015年之外。這是有效的,但我並不認爲 認爲這是最有效的方式來做到這一點,如果我使用大量的值 數據框來做到這一點。

回答

3

它的類似但很簡單的邏輯。 np.where允許您定義一個類似excel的if語句。如果(x = y,這是否爲真,如果爲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'] 

快速選項

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]