基于/奇数街道数字和街道范围的街道范围进行正确分配街道。

问题描述 投票:0回答:1
我不能把头缠住。

我有两个数据框,

first_df

second_df
,其中包含有关街道细分市场的信息,包括街道名称,街道细分市场的开始和结束数字,以及该细分市场是否适用于偶数或奇数。
first_df
包含街道数字及其相应的地址。
目标是根据
second_df
中的信息将正确的“宗派元素”(基本部门)分配给
second_df

中的每个街道号。因此,它需要通过三个检查:

检查StreetName是否存在(并创建一个仅包含与此StreetName相对应的Elemnts的子集数据框架)
检查Streetnumber是否在

first_df
  1. first_df['Début']
  2. 定义的范围内
    检查它是偶数还是奇数,并根据该扇区的数字是偶数或奇数扇区的一部分分配的。
    
    我面临的问题是,基于街道号是否偶数还是奇数无法正常工作,确定正确部门的逻辑。当前的实施在某些情况下分配了错误的部门。
    
    first_df['Fin']
  3. 运行此功能的输出:
  4. 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'] #print(f'first loop: {num_de_rue}') if street_name in first_df['Voie'].values: # check if street name exists reims_filtered = first_df.loc[first_df['Voie'] == street_name] # if it does create a dataframe containing only the elements matching the street name #print(reims_filtered) for reims_index, reims_matching_row in reims_filtered.iterrows(): # iterate over the rows the filtered dataframe #print(reims_matching_row) if street_number >= reims_matching_row['Début'] and street_number <= reims_matching_row['Fin']: # check if street number is between range of street segment #print(f'Check range {street_number} {reims_matching_row['Périmètre élémentaire']}') if street_number % 2 == 0: # check if street number is even print(reims_index, street_number, reims_matching_row['Partie']) if reims_matching_row['Partie'] == 'Pair': # if it is even, then check which sector should be taken to be assigned based on street segment and its corresponding odd/even sector 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'

如果第一个行“ partie”不是“对”,那么您不会分配任何东西,并且您将在else语句以下的休息时间,退出循环。

要修复它,我们可以添加要求它与您的条件匹配的要求:

python pandas dataframe sorting
1个回答
0
投票

对数据的大小进行缩减,您可以想象一个街道的子集,然后在一个范围内加入以加快速度。


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.