wangxishi

2020-10-09   阅读量: 11311

Python 数据分析师

python根据指定列排序

扫码加入数据分析学习群

如图数据,想按照区间列进行从小到大排序,前面日期列,每月为一个单位,在相同日期基础上,按照区间从小到大排序,请问如何实现

1.png

问题1009.xlsx


75.3065 1 5 关注作者 收藏

评论(5)

wangxishi
2020-10-10

哪里可以看到正则表达式的语法?

0.0000 0 0 回复
PGC123
2020-10-10

这个网上有许多,搜索 ”正则表达式语法“ 即可查询到大量正则表达式相关的资料。类似下面的表格内容:红框中的是我们这次用到过的内容

image.png

55.7135 2 0 回复
wangxishi
2020-10-10

前面那个r是什么意思呢

0.0000 0 0 回复
PGC123
2020-10-10

r"" 可以让后面的字符串中转义符号不转义

0.0000 0 0 回复
wangxishi
2020-10-10

这个位置麻烦解释下,extract(r"([0-9]*)"),括号里面的r以及[0-9]*是什么意思?

0.0000 0 0 回复
PGC123
2020-10-10

这是extract方法是pandas用来对数据做正则处理的接口,通过编写正则表达式可以提取自己想要的数据。

r'([0-9]*)'这个正则表达式的语法目的是匹配第一次出现的纯数字,其中[0-9]代表任一数字 *代表前面的内容出现0次或多次。

至于这个语法是如何写出的:

1、需要看一下正则表达式的基本语法

2、观察数据存在的规律。。


0.0000 0 0 回复
wangxishi
2020-10-09

请问怎么把字符串列生成新的数字列呢,并且保留原字符串列进行排序

0.0000 0 0 回复
PGC123
2020-10-09

具体实现代码参考如下:


# 导入数据

import pandas as pd

df = pd.read_excel("1602230751_681754.xlsx",usecols=range(6),index_col=0)

# 将数据提取转换为整型并添加到"start"列

df["start"] = df["区间"].str.extract(r"([0-9]*)").astype(int)

# 依据日期、start 两列分别排序

df.sort_values(["日期","start"])


0.0000 0 0 回复
PGC123
2020-10-09

1、dataframe中可以使用sort_values方法对各个列进行排序

如下的文档:

df.sort_values(

by,

axis=0,

ascending=True,

inplace=False,

kind='quicksort',

na_position='last',

ignore_index=False,

)

其中by为排序依据,可以赋值为列表。本题目中先按照日期后按照区间可以这样写

df.sort_values(["日期","区间"])


2、但是区间是字符串类型的,不易区分数值大小,所以需要先使用字符串生成新列,比如10000-50000 可以转换为数字10000,根据转换后的结果列进行排序就正确了。

75.3065 1 0 回复

推荐课程

推荐帖子