在python中将整数范围映射到字典

时间:2020-03-06 16:50:16

标签: python pandas dictionary integer range

如果我有一个带有邮政编码的数据框,我想创建一个标记为“地区”的新列,该列将包含多个邮政编码范围,并将它们分配给特定区域。例如

如果邮政编码是1000--1209,则该区域应为“ NSW”

myregion={ 1000:'NSW', 1001:'NSW'}

Postal Code
1000
1001
...
1209
2000
2001
299

所需的数据框为:

Postal Code  Region
1000         NSW
1001         NSW
...
1209         NSW
2000
2001
299

我将如何在python中执行此操作?正确的语法是什么?非常感谢!

4 个答案:

答案 0 :(得分:1)

假设您的数据帧称为df

def get_region(postal_code):

    if postal_code >= 1000 and postal_code <= 1209:
        return 'NSW'

    ...other cases...

df['Region'] = df['Postal Code'].apply(lambda x: get_region(x))

答案 1 :(得分:0)

第一个选择是使用邮政编码api ...最好选择一个。 第二种选择是手动创建一个函数,该函数将数字映射到字符串,然后在数据框上使用.map在其中创建新的Series。

答案 2 :(得分:0)

基于

如果邮政编码是1000--1209,则该区域应为“ NSW”

我想到了这个

def assign_region(x):
    myregion = { 'NSW': range(1000, 1210)
                 # etc
               }
    for region, r in myregion.items():
        if x in r:
            return region


df['Region'] = df['Postal Code'].apply(assign_region)

答案 3 :(得分:0)

np.where允许向量化操作:

df['Region'] = np.where((df['Postal Code']>=1000)&(df['Postal Code']<=1209), 'NSW', '')