2017-06-19 91 views
2
import pandas as pd 
import numpy as np 

dt=pd.DataFrame({'schoolNum':['12','13','14','13'],'oldDistrict':['A','B', 'C','B'],'newDistrict':['F',' ','G',' ']}) 

dt=pd.DataFrame({'schoolNum':['12','13','14','13'],'oldDistrict':['A','B', 'C','B'],'newDistrict':['F','B','G','B']}) 

我試圖從另一個值替換一個蟒蛇大熊貓數據框列的值:通過基於條件

dt.ix[dt['oldDistrict']=='13', 'newDistrict']=dt.oldDistrict 

,但我得到的錯誤消息是一些關於軸線。

+1

你們是不是要替換空白值,或在「schoolNum」替換列與特定值關聯的值,每你嘗試過什麼樣的榜樣嗎? – jack6e

+0

是的,此時我正在嘗試替換缺少的(空白)值。但偶爾我也必須處理在某個時間點發生變化的非缺失值。 – izhak

+1

我問,因爲A-Za-z的答案限制了用例,即使它適用於你的小例子。 .loc方法更符合你的要求(「根據條件,用另一個python熊貓數據框列的值替換一個python熊貓數據框列的值」),並且爲處理未來情況提供了更大的靈活性,包括空白值,即(dt .loc [dt ['newDistrict'] =='','newDistrict'] = dt ['oldDistrict'])。 – jack6e

回答

3

可以替代由np.nan空白,然後用combine_first

dt = dt.replace({' ': np.nan}) 
dt['newDistrict'] = dt['newDistrict'].combine_first(dt['oldDistrict']) 

返回

newDistrict oldDistrict schoolNum 
0 F   A   12 
1 B   B   13 
2 G   C   14 
3 B   B   13 
+0

謝謝,這工作:) – izhak

+0

不客氣,你可以考慮接受答案:) – Vaishali

+1

我也忘記了如何做到這一點,但現在我記得:) #longtimenotaround – izhak

1

兩件事情:

  1. 你想用的.loc代替.ix:

    dt.loc[<condition>, <column(s) returned>] 
    
  2. 'oldDistrict'的值不等於「13」 - 這些值在「schoolNum」中。所以,你完全想要的是:

    dt.loc[dt['schoolNum']=='13', 'newDistrict'] = dt['oldDistrict']