J'ai un nombre de trames de données (~ 30 000 lignes) de voyages par code de station.
gare de | station à | compter |
---|---|---|
20001 | 20040 | 55 |
20040 | 20001 | 67 |
20007 | 20080 | 100 |
20080 | 20007 | 50 |
et dataset - route id: liste des identifiants de la station. Exemple 10001 (20001,2020,20013, ... 20040); 10002 (20007,2000,20019, ... 20080). Il existe environ 100 itinéraires de ce type. La tâche est de faire ajouter le nom de l'itinéraire à la trame de données selon le critère si la gare de départ et de destination est incluse dans l'un ou l'autre ensemble
gare de | station à | compter | route |
---|---|---|---|
20001 | 20040 | 55 | 1001 |
20040 | 20001 | 67 | 1001 |
20007 | 20080 | 100 | 1002 |
20080 | 20007 | 50 | 1002 |
Dans la forme principale, la liste des routes est un fichier xml (élément Sation id C1, route id NM), je peux l'analyser, mais je ne sais pas dans quelle forme le convertir (dataframe, dict) et que faire prochain
<?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>
Disons que vous analysez le XML et le convertissez dans un format dict comme ci-dessous:
route_id = {1001 : [20001,20040], 1002: [20007,20080]}
Ensuite, vous écrivez ce morceau de code à convertir dans un format que vous pourrez utiliser plus tard pour le faire 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}
Maintenant, utilisez simplement map
et associez le code de la station au code d' station_from
itinéraire correspondant du route_rev
dict.
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
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras