Python将添加一个列,该列的值将列与某些外部集进行比较

2024-06-30 13:18:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧(~30000行)按站点代码计算的行程数

^{tb1}$

数据集-路线id:站点id列表。示例10001(20001202020013,…20040);10002 (20007,2000,20019, ... 20080). 大约有100条这样的路线。 如果出发站和目的站包含在一个或另一个集合中,则任务是根据标准将路线名称添加到数据帧中

^{tb2}$

在主表单中,路由列表是一个xml文件(SSIA id C1项,路由id NM),我可以解析它,但我不知道要将其转换为什么形式(dataframe,dict)以及下一步要做什么

<?xml version="1.0" encoding="windows-1251"?><MRS1>
<MR NM="002001" PT="0">
<C N="001" C1="2040484" L="000" NZ="099" PZ="0000" NO="01" S="ВЕР УФАЛЕЙ  " ZT="0" />
<C N="002" C1="2040751" L="006" NZ="099" PZ="0000" NO="01" S="ОП 100 КМ   " ZT="0" />
...
<C N="022" C1="2030055" L="106" NZ="099" PZ="0000" NO="07" S="ШАРТАШ      " ZT="0" />
<C N="023" C1="2031190" L="108" NZ="099" PZ="0000" NO="07" S="ПЕРВОМАЙСК  " ZT="0" />
<C N="024" C1="2030000" L="110" NZ="099" PZ="0000" NO="07" S="ЕКАТЕРИНБ П " ZT="0" />
</MR>
<MR NM="002002" PT="0">
<C N="001" C1="2040000" L="000" NZ="099" PZ="0000" NO="01" S="ЧЕЛЯБИНСК   " ZT="0" />
<C N="002" C1="2041748" L="002" NZ="099" PZ="0000" NO="01" S="ЛОКОМОТИВ1  " ZT="0" />
...
<C N="044" C1="2041502" L="152" NZ="099" PZ="0000" NO="01" S="ОП 1948 КМ  " ZT="0" />
<C N="045" C1="2040550" L="160" NZ="099" PZ="0000" NO="01" S="ЗЛАТОУСТ    " ZT="0" />
</MR>
<MRS1>

Tags: 数据noid路由列表站点xml路线
1条回答
网友
1楼 · 发布于 2024-06-30 13:18:36

比方说,解析XML并将其转换为dict格式,如下所示:

route_id = {1001 : [20001,20040], 1002: [20007,20080]}

然后,编写这段代码,将其转换为一种格式,以后可以使用该格式执行series.map

route_rev = {}
for i,k in zip(route.keys(), route.values()):
    for j in k:
        route_rev[j] = i
print(route_rev)
{20001: 1001, 20040: 1001, 20007: 1002, 20080: 1002}

现在,只需使用map并将station_from中的站点代码与route_revdict中相应的路由代码进行匹配

df['route'] = df.station_from.map(route_rev)
print(df)
   station_from  station_to  count  route
0         20001       20040     55   1001
1         20040       20001     67   1001
2         20007       20080    100   1002
3         20080       20007     50   1002

相关问题 更多 >