2012-11-19 202 views
5

我有一個非常大的數據框(〜1.7MM行x 6列)。相關數據的一個簡單的例子是:根據另一列中的值有條件地替換值

City  Borough 

Brooklyn Brooklyn 
Astoria  Queens 
Astoria  Unspecified 
Ridgewood Unspecified 
Ridgewood Queens 

所以我想,以填補基於從市列的信息「未指定」的值。例如,城市裏奇伍德在一個實例中位於未指定的自治市鎮,但在數據集的其他地方正確地將自治市鎮列爲皇后區。

我已經探索過Panda的fillna,但它似乎並不符合我的需求。我也考慮過np.where方法,但我不確定它在這種情況下是如何工作的。我對熊貓很新,但是地圖/應用功能可能是我需要的嗎?這可能可以通過一千種不同的方式實現,但是在給定數據大小的情況下尋找不會抓取的內容。

編輯:我能夠創建一個包含城市之間出現的最高「對」,並用下面的代碼市鎮的字典:

specified = data[['Borough','City']][data['Borough']!= 'Unspecified'] 
paired = specified.Borough.groupby(specified.City).max() 
paired = paired.to_dict() 

配對dict有城市爲重點和自治市鎮作爲價值。現在最後一步是將其應用/映射回自治市鎮專欄......我該怎麼做?

+0

替換之後,你想要這些重複值嗎?也就是說,你想結束兩個相同的行,說「Astoria」/「皇后區」?或者你可以只刪除一個未指定的值? – BrenBarn

+0

是的,重複是可以和預期的。 – ChrisArmstrong

回答

3

這裏有一種方法:

>>> d 
     City  Borough 
0 Brooklyn  Brooklyn 
1 Astoria  Queens 
2 Astoria Unspecified 
3 Ridgewood Unspecified 
4 Ridgewood  Queens 
>>> realData = d[d.Borough != "Unspecified"] 
>>> realData = pandas.Series(data=realData.Borough.values, index=realData.City) 
>>> d['Borough'] = d.City.map(realData) 
>>> d 
     City Borough 
0 Brooklyn Brooklyn 
1 Astoria Queens 
2 Astoria Queens 
3 Ridgewood Queens 
4 Ridgewood Queens 

這假定每個城市有且只有一個非不明鎮值。 (如果一個城市沒有價值,但未指定,該區域將顯示爲NA。)

編輯:如果您已經在編輯後的文章中創建了字典,只需使用d['Borough'] = d.City.map(paired['Borough'])即可將每個城市映射到行政區你的字典。 map是一個有用的方法來了解。它可以使用Pandas系列,使用字典或使用返回給定密鑰的映射值的函數來映射值。

+0

有些情況下,當同一個城市可能與不同的行政區配對時,例如城市「紐約」就像97%的事件映射到曼哈頓自治市,但地圖如何處理這種情況? – ChrisArmstrong

+0

@ChrisArmstrong:如果一個城市出現多個不同的行政區,它將不起作用。但是在這種情況下你想要發生什麼?你想如何選擇? – BrenBarn

+0

查看我的編輯 – ChrisArmstrong

相關問題