【问题标题】:Min, max and step for address ranges地址范围的最小值、最大值和步长
【发布时间】:2020-11-03 16:17:40
【问题描述】:

我有一个 Pandas 数据框,其中包含按街道和城市分组的 16,000 个地址。我需要找到连续地址范围之间的最小值、最大值和步长。

例如,10,12,14,16 Main street。最小值为 10,最大值为 16,步长为 2。

问题是范围并不总是那么简单,有些不是真正的地址范围,而是沿街道分布的地址。

例如,4456、5567、6678,主要街道。

我希望能够识别连续范围及其最小值、最大值和步长,并将那些不连续的范围分成单独的行。

我已经知道了最小值和最大值,但我不知道如何找到顺序地址。

    df['street_min']=[min(x) for x in df['Street Number'].tolist()]
    df['street_max']=[max(x) for x in df['Street Number'].tolist()]

样本数据

    ID    Street_number     Street_Name
    1     [10,12,14,16]     Main St
    2     [4456, 5567, 6657] First St        (These 3 would become 3 unique records)
    3     [60,65,70, 100]   Second St         (This example would keep 60-70 and remove 100 to another row)

【问题讨论】:

    标签: python pandas range sequence street-address


    【解决方案1】:

    让我们分解Street_number,找到连续的差异并与ID一起分组:

    df = df.explode('Street_number')
    
    # consecutive differences
    df['diff'] = df.groupby('ID')['Street_number'].diff().bfill()
    
    # groups
    df['group'] = df.groupby('ID')['diff'].transform(lambda x: x.ne(x.shift()).cumsum())
    
    # output:
    (df.groupby(['group','ID'], as_index=False)
       .agg(Street_number=('Street_number',list),
            Street_Name=('Street_Name', 'first'),
            min_number=('Street_number','min'),
            max_number=('Street_number', 'max')
           )
    )
    

    输出:

       group  ID     Street_number Street_Name  min_number  max_number
    0    1.0   1  [10, 12, 14, 16]     Main St          10          16
    1    1.0   2      [4456, 5567]    First St        4456        5567
    2    1.0   3      [60, 65, 70]   Second St          60          70
    3    2.0   2            [6657]    First St        6657        6657
    4    2.0   3             [100]   Second St         100         100
    

    【讨论】:

    • @aguay091 不确定数据/预期输出的样子。也许您可以尝试发布一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多