我需要根据同一数据帧中另一列的值对数据帧上的列中的值进行升序排序。我要做的第一件事是执行“选择”查询以检索表中的所有数据并将其存储在名为“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
列转换为分类数据类型,并按token
然后按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
关于python - 如何使用python根据同一数据框中另一列的值对数据框中的列中的值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68742345/