基于街道奇偶编号与路段范围正确分配基础扇区的逻辑问题求助
基于街道奇偶编号与路段范围正确分配基础扇区的逻辑问题求助
我实在搞不懂这个问题了😭。我有两个DataFrame:first_df和second_df。其中first_df存储的是街道路段信息,包括街道名称、路段的起止门牌号,以及该路段是对应偶数还是奇数门牌号。second_df则包含门牌号和对应的地址信息。
我的目标是根据first_df里的信息,给second_df中的每个门牌号分配正确的“Secteur Elementaire”(基础扇区)。这个过程需要通过三个检查:
- 检查街道名称是否存在(并创建只包含该街道对应元素的子集DataFrame)
- 检查门牌号是否在
first_df['Début']和first_df['Fin']定义的范围内 - 检查门牌号的奇偶性,并根据其所属的奇偶路段分配对应的扇区
现在我遇到的问题是,根据门牌号奇偶性确定正确扇区的逻辑没有按预期工作,在某些情况下分配了错误的扇区。
我的代码实现
import pandas as pd first_df = pd.DataFrame({ 'Voie': ['AVENUE D EPERNAY', 'AVENUE D EPERNAY', 'AVENUE D EPERNAY', 'AVENUE D EPERNAY'], 'Périmètre élémentaire': ['PROVENCAUX', 'AVRANCHES', 'MAISON BLANCHE', 'SCULPTEURS JACQUES'], 'Périmètre maternelle': ['AUVERGNATS-PROVENCAUX', 'AVRANCHES', 'MAISON BLANCHE', 'SCULPTEURS JACQUES'], 'Début': [142, 1, 73, 2], 'Fin': [998, 71, 999, 140], 'Partie': ['Pair', 'Impair', 'Impair', 'Pair'] }) second_df = pd.DataFrame({ 'numero': [1, 2, 6, 7, 8, 9, 10, 12], 'nom_afnor': ['AVENUE D EPERNAY', 'AVENUE D EPERNAY', 'AVENUE D EPERNAY', 'AVENUE D EPERNAY', 'AVENUE D EPERNAY', 'AVENUE D EPERNAY', 'AVENUE D EPERNAY', 'AVENUE D EPERNAY'], 'Secteur Elementaire': ['tbd', 'tbd', 'tbd', 'tbd', 'tbd', 'tbd', 'tbd', 'tbd'] }) def sort_df(first_df, second_df): for bano_index, row in second_df.iterrows(): street_number = row['numero'] street_name = row['nom_afnor'] if street_name in first_df['Voie'].values: # 检查街道名称是否存在 reims_filtered = first_df.loc[first_df['Voie'] == street_name] # 创建匹配该街道的子集DataFrame for reims_index, reims_matching_row in reims_filtered.iterrows(): # 遍历子集的每一行 if street_number >= reims_matching_row['Début'] and street_number <= reims_matching_row['Fin']: # 检查门牌号是否在路段范围内 if street_number % 2 == 0: # 检查门牌号是否为偶数 print(reims_index, street_number, reims_matching_row['Partie']) if reims_matching_row['Partie'] == 'Pair': # 如果是偶数,检查路段是否对应偶数扇区 print(f'Check column {street_number} {reims_matching_row['Périmètre élémentaire']}') sector_to_assign = reims_matching_row['Périmètre élémentaire'] second_df.at[bano_index, 'Secteur Elementaire'] = sector_to_assign break else: print(f'Check odd {street_number} {reims_matching_row['Périmètre élémentaire']}') sector_to_assign = reims_matching_row['Périmètre élémentaire'] second_df.at[bano_index, 'Secteur Elementaire'] = sector_to_assign break return second_df sort_df(first_df, second_df)
运行代码后的输出
Check odd 1 AVRANCHES 1 2 Impair 1 6 Impair Check odd 7 AVRANCHES 1 8 Impair Check odd 9 AVRANCHES 1 10 Impair 1 12 Impair numero nom_afnor Secteur Elementaire 0 1 AVENUE D EPERNAY AVRANCHES 1 2 AVENUE D EPERNAY tbd 2 6 AVENUE D EPERNAY tbd 3 7 AVENUE D EPERNAY AVRANCHES 4 8 AVENUE D EPERNAY tbd 5 9 AVENUE D EPERNAY AVRANCHES 6 10 AVENUE D EPERNAY tbd 7 12 AVENUE D EPERNAY tbd
很明显,奇偶性判断的逻辑有问题,尤其是在判断reims_matching_row['Partie'] == 'Pair'这部分。有没有大佬能给点思路?
备注:内容来源于stack exchange,提问作者Louis
相关产品推荐
相关产品推荐

