地址范围的最小值,最大值和步长

问题描述

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

例如,大街10、12、14、16。最小为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)

解决方法

让我们爆炸bottomNavigationBar: BottomAppBar( color: Colors.blueGrey,shape: CircularNotchedRectangle(),child: Row( mainAxisSize: MainAxisSize.max,mainAxisAlignment: MainAxisAlignment.spaceAround,children: <Widget>[ Column( children: [ IconButton( icon: Icon(Icons.note_add),color: Colors.white,// tooltip: 'Add Note',onPressed: () => _startAddNewNote(context),),Text('Add Note'),],Column( children: [ IconButton( icon: Icon(Icons.image),// tooltip: 'Open Image Clue',onPressed: () => _startShowImageClue(context),Text('Open Image Clue'),,找到连续的差异并将其与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')
       )
)