我是靠谱客的博主 落后背包,最近开发中收集的这篇文章主要介绍python pandas 排序_python pandas排序问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

In [48]: import pandas as pd

...:

...: # 读取文件

...: df = pd.read_excel('data.xlsx')

...:

...: # 按照city进行分组,并按照date升序排序

...: new_df = df.sort_values(['date']).groupby('city')

...:

...: # 取出结果中的每一行拼接成新的dataframe

...: data_list = [pd.DataFrame(row) for head, row in new_df]

...: res_df = pd.concat(data_list)

...: res_df

如果需要自定义city的顺序,可以使用pd.Categorical修改city的顺序。

res_df["city"] = pd.Categorical(df["city"],["广州","南京","杭州","北京","上海"])

res = res_df.sort_values("city")

res

如果要自动生成特定的自定义城市顺序,只需要通过程序生成

["广州","南京","杭州","北京","上海"]

这个列表。

这个程序的生成逻辑是:原始表的城市名去倒序排列,后保持顺序去重。

In [9]: df['city'].values.tolist()[::-1]

Out[9]: ['广州', '广州','广州', '广州', '南京', '南京', '南京', '南京', '杭州', '杭州', '杭州', '北京', '北京', '广州', '上海']

直接set去重会破坏顺序,需要自定义一个函数

def remove_duplicate(items):

seen = set()

for item in items:

if item not in seen:

yield item

seen.add(item)

return list(seen)

因此,最后列表生成的方法为:

city_order = remove_duplicate(df['city'].values.tolist()[::-1])

最终代码:

import pandas as pd

df = pd.read_excel('data.xlsx')

new_df = df.sort_values(['date']).groupby('city')

data_list = [pd.DataFrame(row) for head, row in new_df]

res_df = pd.concat(data_list)

def remove_duplicate(items):

seen = set()

for item in items:

if item not in seen:

yield item

seen.add(item)

return list(seen)

city_order = remove_duplicate(df['city'].values.tolist()[::-1])

res_df["city"] = pd.Categorical(df["city"],city_order)

# 重排后顺序会乱,再增加date修正

res = res_df.sort_values(["city","date"])

res

最后结果:

city date

2 广州 2020-01-17

4 广州 2020-01-19

5 广州 2020-01-20

6 广州 2020-01-21

14 广州 2020-01-29

1 南京 2020-01-16

11 南京 2020-01-26

12 南京 2020-01-27

13 南京 2020-01-28

8 杭州 2020-01-23

9 杭州 2020-01-24

10 杭州 2020-01-25

3 北京 2020-01-18

7 北京 2020-01-22

0 上海 2020-01-15

修改原始数据后,最终的结果如下

city date

5 广宁 2020-01-20

6 广宁 2020-01-21

2 广州 2020-01-17

4 广州 2020-01-19

12 广州 2020-01-27

13 广州 2020-01-28

14 广州 2020-01-29

1 南京 2020-01-16

11 南京 2020-01-26

15 南京 2020-01-30

16 南京 2020-01-31

8 杭州 2020-01-23

9 杭州 2020-01-24

10 杭州 2020-01-25

3 北京 2020-01-18

7 北京 2020-01-22

0 上海 2020-01-15

根据城市的出现的个数倒序进行排列的代码如下:

import pandas as pd

df = pd.read_excel('data.xlsx')

new_df = df.sort_values(['date']).groupby('city')

data_list = [pd.DataFrame(row) for head, row in new_df]

res_df = pd.concat(data_list)

from collections import Counter

city_counter = Counter(df['city'].values.tolist())

city_order = [k for k, v in sorted(city_counter.items(), key=lambda item:item[1], reverse=True)]

res_df["city"] = pd.Categorical(df["city"],city_order)

# 重排后顺序会乱,再增加date修正

res = res_df.sort_values(["city","date"])

res

结果如下:

city date

2 广州 2020-01-17

4 广州 2020-01-19

12 广州 2020-01-27

13 广州 2020-01-28

14 广州 2020-01-29

1 南京 2020-01-16

11 南京 2020-01-26

15 南京 2020-01-30

16 南京 2020-01-31

8 杭州 2020-01-23

9 杭州 2020-01-24

10 杭州 2020-01-25

3 北京 2020-01-18

7 北京 2020-01-22

5 广宁 2020-01-20

6 广宁 2020-01-21

0 上海 2020-01-15

最后

以上就是落后背包为你收集整理的python pandas 排序_python pandas排序问题的全部内容,希望文章能够帮你解决python pandas 排序_python pandas排序问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部