Pandas实现列(column)排序的几种方法

 更新时间:2023年11月26日 10:35:35   作者:AI科技大本营  
Pandas是一种高效的数据处理库,在数据处理过程中,咱们经常需要将列按照一定的要求进行排序,本文就来介绍一下Pandas实现列(column)排序的几种方法,感兴趣的可以了解一下

Pandas 可以说是 在Python数据科学领域应用最为广泛的工具之一。

Pandas是一种高效的数据处理库,它以 dataframe 和 series 为基本数据类型,呈现出类似excel的二维数据。

在数据处理过程中,咱们经常需要将列按照一定的要求进行排序,以方便展示。

这里,给大家分享下 在 Pandas 中将列排序的几种常用方法。

数据准备

文中主要使用了 pandas 和 akshare ,首先导入 Python 库,如下:

import pandas as pd
import akshare as ak

print(f'pandas version: {pd.__version__}')

本次使用的数据如下:

data = {
    'brand':['Python数据之道','价值前瞻','菜鸟数据之道','Python','Java'],
    'B':[4,6,8,12,10],
    'A':[10,2,5,20,16],
    'D':[6,18,14,6,12],
    'years':[4,1,1,30,30],
    'C':[8,12,18,8,2],
}

df = pd.DataFrame(data=data)
df

7a120b640f64e8a2ec0d95b364a35f2c.png

现将现有的 columns 输出,方便后面 copy 使用。

df.columns

# Index(['brand', 'B', 'A', 'D', 'years', 'C'], dtype='object')

Method 1

第一种方法,也是我自己常用的方法,就是自己将列的名称按需要进行手动排序,然后运行代码如下:

508c9a1e44af41bdd7e1de1d5136e145.png

Method 2

第二种方法,是使用 .iloc 方法,通过列的位置来进行排序,如下:

0947c6a4e7373f914538395b47d3f85e.png

Method 3

第三种方法,是使用 .loc 方法,通过列的名称来进行排序,如下:

26a142963269dccf3ee02640dfabc110.png

这种方法跟第一种方法类似,个人觉得第一种方法更简洁些。

Method 4

第四种是 逆序 排序,算是排序中一种特定的排序方式。

# Method 4 ,逆序

cols = list(df.columns)

cols.reverse()

df[cols]

上述代码中,cols.reverse() 是将列表(list)进行逆序排序。

此外,列表(list)的逆序排序,还可以用 cols[::-1] 来实现。因此,下面的方法也可以实现逆序排序。

# Method 4 ,逆序

cols = list(df.columns)

df[cols[::-1]]

0c2fcfcfdf5fa957b550a12db893f92a.png

实战案例:自由排序

有时候,当存在变量、列的数量较多,或者不同的dataframe中列的名称不完全一致等情况出现时,咱们不一定会通过列名称来实现排序。

这里分享一个实战案例,是关于制作基金的十大持仓数据表的,具体过程我就不在这里描述了,下面给出实现的函数,有兴趣的同学可以研究下。

自定义函数如下:

# 需要安装 akshare
# pip install akshare

years = ['2019','2020','2021']

def fund_stock_holding(years,code):
    data = pd.DataFrame()
    for yr in years:
        df_tmp = ak.fund_em_portfolio_hold(code=code,year=yr)
        data = data.append(df_tmp)

    data['季度']=data['季度'].apply(lambda x:x[:8])
    data['占净值比例'] = pd.to_numeric(data['占净值比例'])
    data = data.sort_values(['季度','持仓市值'],ascending=[True,False])
    df = data.set_index(['序号','季度']).stack().unstack([1,2]).head(10)
    df = df.loc[:,(slice(None), '股票名称')]
    df = df.droplevel(None,axis=1)
    df.columns.name=None
    df = df.reset_index()
#     df.index.name = None
    df['基金代码'] = code
    return df
    
df = fund_stock_holding(years,'005669')
df

得到的数据表格如下:

ad00a57248cc62665f3833ced80917bf.png

上面的表格中,我需要将 基金代码 这一列移动到 序号 这列的后面,由于 years = ['2019','2020','2021'] 这是一个变量,当具体的值不同时,会导致列名称不一样,因此,在这种情况下我们不能直接使用列的具体名称,但咱们可以通过 列的位置组合来实现,列的调整具体如下:

cols = df.columns.tolist()
    cols = cols[:1] + cols[-1:] + cols[1:-1]  # 将基金代码列名放前面
    df = df[cols]

将上面的调整过程整合到自定义函数中,完整的代码如下:

# 需要安装 akshare
# pip install akshare

years = ['2019','2020','2021']

def fund_stock_holding_update(years,code):
    data = pd.DataFrame()
    for yr in years:
        df_tmp = ak.fund_em_portfolio_hold(code=code,year=yr)
        data = data.append(df_tmp)

    data['季度']=data['季度'].apply(lambda x:x[:8])
    data['占净值比例'] = pd.to_numeric(data['占净值比例'])
    data = data.sort_values(['季度','持仓市值'],ascending=[True,False])
    df = data.set_index(['序号','季度']).stack().unstack([1,2]).head(10)
    df = df.loc[:,(slice(None), '股票名称')]
    df = df.droplevel(None,axis=1)
    df.columns.name=None
    df = df.reset_index()
#     df.index.name = None
    df['基金代码'] = code
    cols = df.columns.tolist()
    cols = cols[:1] + cols[-1:] + cols[1:-1]  # 将基金代码列名放前面
    df = df[cols]
    return df
    
df = fund_stock_holding_update(years,'005669')
df

效果如下:

a1a712bdf58e9744cf937c280163b509.png

当然,我最后实现的效果是将基金代码换成基金名称,这个可以想办法实现,效果如下:

9b7746821f7a7869fce9f38c2aef0b2a.png

小结

以上就是关于 Pandas 中 列名称排序的介绍,看似很简单的内容,在最后的实践中,也还是有些小技巧的。

到此这篇关于Pandas实现列(column)排序的几种方法的文章就介绍到这了,更多相关Pandas 列排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python构建图像分类识别器的方法

    Python构建图像分类识别器的方法

    今天小编就为大家分享一篇Python构建图像分类识别器的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python读取文件名并改名字的实例

    python读取文件名并改名字的实例

    今天小编就为大家分享一篇python读取文件名并改名字的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • ansible作为python模块库使用的方法实例

    ansible作为python模块库使用的方法实例

    ansible是一个python package,是个完全的unpack and play软件,对客户端唯一的要求是有ssh有python,并且装了python-simplejson包,部署上简单到发指。下面这篇文章就给大家主要介绍了ansible作为python模块库使用的方法实例,需要的朋友可以参考借鉴。
    2017-01-01
  • python 6.7 编写printTable()函数表格打印(完整代码)

    python 6.7 编写printTable()函数表格打印(完整代码)

    这篇文章主要介绍了python 6.7 编写一个名为printTable()的函数 表格打印,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Python3合并两个有序数组代码实例

    Python3合并两个有序数组代码实例

    这篇文章主要介绍了Python3合并两个有序数组代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • TensorFlow如何实现反向传播

    TensorFlow如何实现反向传播

    这篇文章主要为大家详细介绍了TensorFlow如何实现反向传播,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • python实现RabbitMQ的消息队列的示例代码

    python实现RabbitMQ的消息队列的示例代码

    这篇文章主要介绍了python实现RabbitMQ的消息队列的示例代码,总结了RabbitMQ中三种exchange模式的实现,分别是fanout, direct和topic。感兴趣的小伙伴们可以参考一下
    2018-11-11
  • python算法学习之桶排序算法实例(分块排序)

    python算法学习之桶排序算法实例(分块排序)

    本代码介绍了python算法学习中的桶排序算法实例,大家参考使用吧
    2013-12-12
  • Python实现随机森林RF模型超参数的优化详解

    Python实现随机森林RF模型超参数的优化详解

    这篇文章主要为大家详细介绍了基于Python的随机森林(Random Forest,RF)回归代码,以及模型超参数(包括决策树个数与最大深度、最小分离样本数、最小叶子节点样本数、最大分离特征数等)自动优化的代码,感兴趣的小伙伴可以了解一下
    2023-02-02
  • Python中利用Scipy包的SIFT方法进行图片识别的实例教程

    Python中利用Scipy包的SIFT方法进行图片识别的实例教程

    SIFT算法可以检测图片中的局部特征,算法原理相当复杂...但是!Python强大的第三方包Scipy中带有实现SIFT算法的SIFT方法,我们只要拿来用就可以了,下面就为大家带来Python中利用Scipy包的SIFT方法进行图片识别的实例教程.
    2016-06-06

最新评论