问题描述
我有一个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')
)
)