python - 如何使用python根据同一数据框中另一列的值对数据框中的列中的值进行排序

标签 python pandas dataframe

我需要根据同一数据帧中另一列的值对数据帧上的列中的值进行升序排序。我要做的第一件事是执行“选择”查询以检索表中的所有数据并将其存储在名为“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/

相关文章:

python - 为什么我们不能在特征缩放中对依赖矩阵和独立矩阵使用单个对象?

python - 机器人框架如何获取不同国家的不同时区和区域设置?

python - 设置行选择等于字符串列表

python - Pandas 替换转义字符 '/'

python-3.x - 如何在Pandas中一次将多列数据类型格式转换为另一种数据类型格式,而又不提及列名称?

python - mac 和 textmate 的新手,有人可以解释这些快捷方式吗?

python - pyodbc 发生内部错误,阻止进一步处理此命令 : 'Object reference not set to an instance of an object.'

python - 从元组列表创建 pandas 日期时间索引

python - 在 python 中的下划线处拆分并存储第一个值

python - 查找 pandas 列的平均时间