1、起因
今天做到北京瑪達科技有限公司2021數(shù)據(jù)處理工程師筆試題,有一題是這樣:
按照文件中單詞出現(xiàn)頻次由高往低依次排序,這個對我來說很好實現(xiàn),用上 pandas 的 sort_values 方法就手到擒來。但是他后面又加上了一個條件,如果頻次相同的情況下,按照單詞的 MD5 值排序。這可把我迷住了:
- 先用sort_values方法,頻次由高往低依次排,再把頻次相同單獨拿出來再用 MD5 排?(因為sort_values排序后,同一頻次的單詞順序會改變)
- 還是先 MD5 排,再在不改變同一頻次的單詞順序情況下,頻次由高往低依次排?
最后去看了有關于 sort_values 的文檔,成功解決先把單詞出現(xiàn)頻次由高往低依次排序,再把頻次相同的情況下的單詞按照 MD5 值排序這個問題,下面我?guī)Т蠹一仡櫼幌?Python pandas sort_values() 方法的使用
2、sort_values() 函數(shù)說明
pandas 庫的 sort_values() 函數(shù)可以對 Dataframe 的數(shù)據(jù)集按照某個字段中的數(shù)據(jù)進行排序。該函數(shù)可以指定列數(shù)據(jù)或行數(shù)據(jù)進行排序,可以是單個,也可以是 多個(以前經常用來處理單列/行數(shù)據(jù),忘記了 sort_values() 也可以處理多列/行數(shù)據(jù))。 series 也有 一個 sort_values() 函數(shù),但在參數(shù)上稍有區(qū)別。
官方文檔:pandas.Series.sort_values 和 pandas.DataFrame.sort_values
3、sort_values() 具體參數(shù)
格式如下:文章來源:http://www.zghlxwxcb.cn/news/detail-564360.html
DataFrame.sort_values(by=‘進行排序的列名或索引值’, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’, ignore_index=False, key=None)
參數(shù) | 說明 |
---|---|
by | 指定要進行排序的列名或索引值 |
axis | 若 axis=0 或 ‘index’,則按照指定 列 的數(shù)據(jù)大小排序;若 axis=1 或 ‘columns’,則按照指定 索引 中數(shù)據(jù)大小排序。默認axis=0 |
ascending | 若 ascending=True,則按照升序排序;若 ascending=False,則按降序排序,默認為True,即升序排序。如果這是一個 bool 列表,則必須匹配 by 的長度 |
inplace | 排序后的數(shù)據(jù)是否替換原來的數(shù)據(jù),默認為False,即不替換 |
ignore_index | 是否重置索引,默認為不重置 |
4、sort_values() 使用
4.1 單列/行排序
import pandas as pd
df = pd.read_csv('test.csv')
# 根據(jù)hello列降序排序
data = df.sort_values(by="hello", ascending=False, ,axis=0)
# axis=0表示按列,同理axis=1表示按行
4.2 多列/行排序
import pandas as pd
df = pd.read_csv('test.csv')
# 根據(jù)第一列降序排序,當?shù)谝涣邢嗤瑫r,根據(jù)第三列進行升序排序。并且重置索引,替換原數(shù)據(jù)
data = df.sort_values(by = ['col1','col3'],ascending=[False,True],ignore_index=True,inplace=True)
5、應用
所以一開始那道題我這樣寫的:文章來源地址http://www.zghlxwxcb.cn/news/detail-564360.html
# -*- coding: utf-8 -*-
# ---
# @Software: PyCharm
# @File: main.py
# @Author: WangYunchang
# @E-mail: wangyunchang@dxy.cn
# @Site:
# @Time: 9月 20, 2022
# ---
import csv
import pandas as pd
import hashlib
counts = {}
# 讀取文件
txt = open("word2count.txt").read()
# 將大寫字母轉化為小寫
txt = txt.lower()
# 把文章中不是英文字母的全部代替為空格
for ch in '0123456789.,()%-':
txt = txt.replace(ch, " ")
# 分割成列表
words = txt.split()
# 統(tǒng)計單詞
for word in words:
counts[word] = counts.get(word, 0) + 1
items = list(counts.items())
# 將所得單詞及數(shù)目寫入csv文件中
csvFile = open('word_result.csv', 'w', newline='')
# 寫入表頭,A是單詞,B是出現(xiàn)次數(shù)
csv.writer(csvFile).writerow(["A", "MD5", "B"])
# 統(tǒng)計結果寫入csv
writer = csv.writer(csvFile)
for key in counts:
# MD5值
ss = hashlib.md5(key.encode('utf-8')).hexdigest()
writer.writerow([key, ss, counts[key]])
csvFile.close()
df = pd.read_csv('word_result.csv')
# 根據(jù)B降序排序,當B相同時,根據(jù)MD5進行降序排序
data = df.sort_values(by=["B", "MD5"], ascending=[False, False])
# 刪除MD5
data = data.drop(columns="MD5")
# 把新的數(shù)據(jù)寫入文件
data.to_csv('word_result.csv', mode='w', index=False)
到了這里,關于Python:pandas庫sort_values()方法的使用的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!