2017-05-31 44 views
2

值我有這樣熊貓/ numpy的地圖柱根據另一列

zip state 
95648 CA 
95683 CA 
95648 NaN 
95648 CA 
95649 CA 

輸入我想通過從拉鍊減少填充狀態的值。 輸出應該是:

zip state 
95648 CA 
95683 CA 
95648 **CA** 
95648 CA 
95649 CA 

現在,我已經試過這樣:

1. creating a map 
2. take a copy of zip column as zip1. 
3. replacing values of zip with state 
4. swap all and delete zip1 

但尋找一個更好的方式。 加載的值成數據(如數據幀)

map1 = data[['zip','state']] 
map1 = data.set_index('zip')['state'].to_dict() 

打印(MAP1)產生:{95838: 'CA',95823: 'CA',95815: 'CA',95834: 'CA',95828:' CA'}

data['zip1'] = data['zip'] 
data = data.replace({"zip": map1}) 
print (data.head(10)) 
data['state'] = data['zip'] 
data['zip'] = data['zip1'] 
data = data.drop(['zip1'],axis=1) 
print (data.head(10)) 

回答

0

一旦你的地圖創建的,你可以用pd.Series.map(),這將需要一個字典作爲參數。

map1 = data.set_index('zip')['state'].dropna().to_dict() 
data['state'] = data['zip'].map(map1) 

另外,如果你從你的DF讓你的郵政編碼狀態配對的所有信息,你也可以使用一個線

data['state'] = data.sort_values('state').groupby('zip')['state'].fillna(method='ffill')