基本上,我有一个Pandas 数据帧(来自CSV)和一个邮政编码列表.现在我需要将它们分类到相应的货运区,这些货运区由各个范围定义,下面给出一个例子.我总共需要定义126个邮政编码范围,但为了简单起见,我缩短了它们.

例如
货运区一:邮政编码10000-19999、40000-49999
货运区2:邮政编码30000-39999、60000-69999
货运区3:邮政编码20000-29999、50000-59999
货运区4:邮政编码00000-09999,70000-79999
未知货运区:所有其他邮政编码.

将CSV的邮政编码分类到上述货运区域的好方法是什么?

我已经try 使用for循环和Switch语句迭代我的数据帧的所有1500个条目.但这似乎并不奏效.

另外,我try 使用pd.Cut(),但总是收到以下错误: ValueError:Bins必须单调增加.

垃圾箱是按升序排列的,我在EXCEL中对它们进行了重新判断,然后再次复制它们.

你会如何面对这样的问题?

我不是在寻找一个完整的代码,只是为了一些 idea ,以解决个别范围的排序.我想避免有10.000个邮政编码的庞大列表,因为申请更改会很烦人,而且这将是一个很大的列表.

编辑: 样本数据:

ID,ZIP
PD0001,14989
PD0002,35345
PD0003,23619
PD0004,1456
PD0005,93451
PD0007,59838
PD0008,9445
PD0009,23119
PD0010,6890

这是一个简单的CSV,遗憾的是我不能上传文件本身.客户数据本身更复杂,但我已经在缩短它了.

推荐答案

我认为在这种情况下,你应该用IntervalIndex来切割,得到一个分类,然后你就可以映射到标签上.不幸的是,您必须手动输入126个bin定义(除非您可以以某种方式解析PDF),但假设您将所拥有的内容转换为如下形式:

bins = pd.IntervalIndex.from_tuples([
        (10000, 19999), (40000, 49999),
        (30000, 39999), (60000, 69999),
        (20000, 29999), (50000, 59999), 
        (0, 9999), (70000, 79999)])

labels = ['Area 1', 'Area 1', 
          'Area 2', 'Area 2', 
          'Area 3', 'Area 3', 
          'Area 4', 'Area 4']

然后假设您的数据如下所示:

df = pd.DataFrame({'zip_code': ['14989', '35345', '23619', '01456', '93451', '23112', '59838', '09445', '23119', '68990']})

您可以像这样获得所有这些对象的面积:

df['area'] = pd.cut(df['zip_code'].astype(int), bins).map(dict(zip(bins, labels)))

说明:IntervalIndex不需要排序,可以处理间隔中的间隙(将是NAN).类别是间隔,因此我们将它们映射到一个包含interval: freight code个类别的词典,以获得所需的输出.

输出:

    zip_code    area
0   14989   Area 1
1   35345   Area 2
2   23619   Area 3
3   01456   Area 4
4   93451   NaN
5   23112   Area 3
6   59838   Area 3
7   09445   Area 4
8   23119   Area 3
9   68990   Area 2

Python相关问答推荐

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

关于Python异步编程的问题和使用await/await def关键字

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

Python Tkinter为特定样式调整所有ttkbootstrap或ttk Button填充的大小,适用于所有主题

如何将数据帧中的timedelta转换为datetime

pandas:在操作pandora之后将pandora列转换为int

如何删除重复的文字翻拍?

将CSS链接到HTML文件的问题

使用polars. pivot()旋转一个框架(类似于R中的pivot_longer)

合并相似列表

Django抛出重复的键值违反唯一约束错误

将像素信息写入文件并读取该文件

高效地计算数字数组中三行上三个点之间的Angular

是否将列表分割为2?

为什么任何一个HTML页面在保存到文件后都会变大6个字节?

SQL模型中包含日期时间的TypeError

安装PyTorch时出现CondaVerificationError

使用Python下载pdf url

如果init被重载,如何输入提示一个基于init的函数的返回类型