我需要根据同一数据帧中另一列的值对数据帧上一列中的值进行升序排序。我做的第一件事是执行“选择”查询以从我们的表中检索所有数据并将其存储在名为“df”的数据框中:
def from_econtable_search_virk():
engine = create_engine(f'postgresql+psycopg2://{username}:{password}@{server}:5432/{database}')
df = pd.read_sql_query('select * from {table}', con=engine)
当我打印数据帧 df 时,我收到如下所示的输出:
number name address city token
0 1 Alarm oxstreet 12 Reading eng
1 3 Center examstreet 24 Bristol JOC
2 2 Computer pentaroad 4 Oxford eng
3 3 Music thisstreet 2 London eng
4 4 School schoolroad 45 London eng
5 1 Hospital madstreet 24 Manchester Owx
6 2 Bowling placestreet 5 Birmingham Owx
7 1 Hotel cemstreet 24 Liverpool JOC
8 2 Paintball shootstreet 2 Manchester JOC
9 4 Computer comproad 24 Brigthon JOC
然后我需要对数据框 df 做的是首先根据列表(而不是按字母顺序)对标记进行排序。
list = ['eng', 'Owx', 'JOC']
这应该使数据帧 df 如下所示:
number name address city token
0 1 Alarm oxstreet 12 Reading eng
1 2 Computer pentaroad 4 Oxford eng
2 3 Music thisstreet 2 London eng
3 4 School schoolroad 45 London eng
4 1 Hospital madstreet 24 Manchester Owx
5 2 Bowling placestreet 5 Birmingham Owx
6 1 Hotel cemstreet 24 Liverpool JOC
7 2 Paintball shootstreet 2 Manchester JOC
8 4 Computer comproad 24 Brigthon JOC
9 3 Center examstreet 24 Bristol JOC
最后,数字列中的值必须根据标记以升序方式排序,数据帧最终将如下所示:
number name address city token
0 1 Alarm oxstreet 12 Reading eng
1 2 Computer pentaroad 4 Oxford eng
2 3 Music thisstreet 2 London eng
3 4 School schoolroad 45 London eng
4 1 Hospital madstreet 24 Manchester Owx
5 2 Bowling placestreet 5 Birmingham Owx
6 1 Hotel cemstreet 24 Liverpool JOC
7 2 Paintball shootstreet 2 Manchester JOC
8 3 Center examstreet 24 Bristol JOC
9 4 Computer comproad 24 Brigthon JOC
将token
列转换为分类 dtype 并按token
then对值进行排序number
。
cats = ['eng', 'Owx', 'JOC']
df['token'] = df['token'].astype(pd.CategoricalDtype(cats, ordered=True))
>>> df['token'].dtype
CategoricalDtype(categories=['eng', 'Owx', 'JOC'], ordered=True)
>>> df.sort_values(['token', 'number'])
number name address city token
0 1 Alarm oxstreet 12 Reading eng
2 2 Computer pentaroad 4 Oxford eng
3 3 Music thisstreet 2 London eng
4 4 School schoolroad 45 London eng
5 1 Hospital madstreet 24 Manchester Owx
6 2 Bowling placestreet 5 Birmingham Owx
7 1 Hotel cemstreet 24 Liverpool JOC
8 2 Paintball shootstreet 2 Manchester JOC
1 3 Center examstreet 24 Bristol JOC
9 4 Computer comproad 24 Brigthon JOC
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句