【问题标题】:Map ranges of codes to strings in python将代码范围映射到python中的字符串
【发布时间】:2020-06-15 22:30:04
【问题描述】:

我有以下要映射的df。邮政编码是 int 类型,我想创建一个区域列,其中包含特定范围内的代码以映射到特定区域,例如

范围(2000-2999):“新南威尔士州”, 范围(3000-3999):“维多利亚”, 范围(4000-5000):“某事”, 9013:“袋鼠”

Postal Code   Region
2000
2001
3001
4001
4999
9013

我执行了以下操作,但出现错误 - “TypeError: 'int' 类型的参数不可迭代”

df['Region']=df['Postal Code'].apply(lambda x:next((v for k, v in postal.items() if x in k),0))

如果您可以提供一种更好的方法来遍历包含所有整数的列并将特定范围的邮政编码映射到某些区域,我们将不胜感激!

谢谢

【问题讨论】:

  • 也许如果您也可以将代码复制到postal,那么这些范围真的看起来像'range(2000-2999)':"NSW" 还是实际范围?

标签: python pandas


【解决方案1】:

我会将pd.IntervalIndexmap 一起使用:

s = pd.Series(['NSW', 'Victoria', 'Something', 'Kangaroo'], 
              index=pd.IntervalIndex.from_arrays([9013,2000,3000,4000],
                                                 [9013,2999,3999,5000], 
                                                 closed='both'))

df['Region'] = df['Postal Code'].map(s)
print(df)

输出:

   Postal Code     Region
0         2000   Victoria
1         2001   Victoria
2         3001  Something
3         4001   Kangaroo
4         4999   Kangaroo
5         9013        NSW

【讨论】:

  • 聪明的答案!
  • @ShubhamSharma 谢谢。感谢您的评论!
【解决方案2】:

发生错误是因为您将 ,0 放入了错误的括号中。

df['Region']=df['Postal Code'].apply(lambda x:next((v for k, v in postal.items() if x in k)),0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 2023-01-09
    • 2011-01-18
    • 2017-06-21
    相关资源
    最近更新 更多