将美国州名称映射到单独在字典中给出的两个字母的首字母缩略词

时间:2016-11-26 01:49:55

标签: python pandas

假设现在我有dataframe有2列:州和城市。

然后我有一个单独的dict,每个州都有两个字母的缩写词。现在我想添加第三列来映射状态名称及其两个字母的缩写。我应该怎么做Python / Pandas?例如,示例问题如下:

import pandas as pd
a = pd.Series({'State': 'Ohio', 'City':'Cleveland'})
b = pd.Series({'State':'Illinois', 'City':'Chicago'})
c = pd.Series({'State':'Illinois', 'City':'Naperville'})
d = pd.Series({'State': 'Ohio', 'City':'Columbus'})
e = pd.Series({'State': 'Texas', 'City': 'Houston'})
f = pd.Series({'State': 'California', 'City': 'Los Angeles'})
g = pd.Series({'State': 'California', 'City': 'San Diego'})
state_city = pd.DataFrame([a,b,c,d,e,f,g])
state_2 = {'OH': 'Ohio','IL': 'Illinois','CA': 'California','TX': 'Texas'}

现在,我必须使用df字典在state_city state_2中映射列状态。映射的df state_city应包含三列:statecitystate_2letter

原始数据集我在几乎所有美国主要城市都有多个专栏。

因此手动执行效率会降低。有没有简单的方法呢?

2 个答案:

答案 0 :(得分:6)

首先,在字典中存储像state name: abbreviation这样的键值对可能更容易,如下所示:

state_2 = {'Ohio': 'OH', 'Illinois': 'IL', 'California': 'CA', 'Texas': 'TX'}

您可以轻松实现这一目标:

state_2 = {state: abbrev for abbrev, state in state_2.items()}

使用pandas.DataFrame.map

>>> state_city['abbrev'] = state_city['State'].map(state_2)
>>> state_city
          City       State abbrev
0    Cleveland        Ohio     OH
1      Chicago    Illinois     IL
2   Naperville    Illinois     IL
3     Columbus        Ohio     OH
4      Houston       Texas     TX
5  Los Angeles  California     CA
6    San Diego  California     CA

答案 1 :(得分:1)

我确实同意@blacksite,认为state_2字典应该这样映射其值:

state_2 = {'Ohio': 'OH','Illinois': 'IL','California': 'CA','Texas': 'TX'}

然后使用pandas.DataFrame.replace

state_city['state_2letter'] = state_city.State.replace(state_2)
state_city

|-|State      |City         |state_2letter|
|-|-----      |------       |----------|
|0| Ohio      | Cleveland   |   OH|
|1| Illinois  | Chicago     |   IL|
|2| Illinois  | Naperville  |   IL|
|3| Ohio      | Columbus    |   OH|
|4| Texas     | Houston     |   TX|
|5| California| Los Angeles |   CA|
|6| California| San Diego   |   CA|