DSML_用Excel实现按行排序后按列排序,最后高亮重复值
記錄一個剛剛用本‘笨’辦法解決的數據清洗和數據整理問題
前幾天收到郵件,對之前我一篇論文的方法進行測試的時候有些疑問。我在復現的時候遇到了以下的問題:
我現在有三個結果,res1, res2 和 res3,他們的結構基本是一致的,都是兩列:
N8 N84 N18 N4 N22 N64 N10 N17 ... M0P1 M0P2 ...如果不用 Python,只用 Excel, 如何找出三個結果中的重復值?(N2-N1視為與N1-N2等同)
我的笨辦法(不用 VBA)
首先,分別按照編號大小左右排序,再從小到達按列排序,最后拼接字符串。然后只要找出三個結果中的重復值并高亮就行了。
首先,將數據清理一下。因為 M0P 開頭的數據只有 M0P1 和 M0P2,我直接通過查找替換將所有 M0P1 換為 1001,M0P2換為1002(1001是因為N*中沒有大于500的值,所以1001可以保證 unique)。
然后,我們將第二列向右移動一列,因為空出的這一列要放分列的輸出。我們通過文本分列向導(數據->分列)將所有N*拆分成N和數字。如果選擇按數據的“分隔符”進行拆分并將N設置為分隔符,則可以直接提取數字(這個在窗口預覽的時候就能看到。具體可以參考微軟的這個教程)。由于之前已經把M0P*轉換為數字了,所以分列后這些1001、1002不會動;對于這兩列,我們分別進行分列操作,這時所有N*中的數字則會以一個新列的形式出現在列旁。之后我們只要所有處理好的數據歸回成完整的兩列,我們的數據清理就完成了。
(Copyright ? https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)
數據現在長這樣:
8 84 18 4 22 64 10 17 ... 1001 1002 ...之后,我們需要進行按行排序,這一步直接做的話我試了一些方案,都不行,除非用 VBA,否則都不能自動化操作。因為我的每行就兩個數字,所以我們可以使用LARGE來實現類似排序的效果。假設我們第一列為excel的A列,第二列為B列,則使用=LARGE(A1:B1,2)就可以找出二者中小的數字,=LARGE(A1:B1,1)則找出二者中大的數字(具體參考這篇微軟的教程:“If n is the number of data points in a range, then LARGE(array,1) returns the largest value, and LARGE(array,n) returns the smallest value.”)
這步完成后大概數據變成這樣:
A B C D 8 84 8 84 18 4 4 18 22 64 22 64 10 17 10 17 ... 1001 1002 1001 1002 ...之后我們直接對C列(每行的最小值)進行按列排序就好,excel會幫我們擴展到全部四列(Copyright ? https://blog.csdn.net/s_gy_zetrov. All Rights Reserved):
A B C D 18 4 4 18 8 84 8 84 10 17 10 17 22 64 22 64 ... 1001 1002 1001 1002 ...最后一步,為了比較重復值,我們需要將CD列擠成一列,這里是用拼接函數=CONCATENATE(C1,"_",D1)然后一樣拉到底使其apply到所有行:
A B C D E 18 4 4 18 4_18 8 84 8 84 8_84 10 17 10 17 10_17 22 64 22 64 22_64 ... 1001 1002 1001 1002 1001_1002 ...將三個結果粘進一個 Excel 文件中,假設拼接字符串的列在E、J、O,則全選這三列,選擇“條件格式”->“重復值”,所有重復出現的字符串就會被高亮出來了!(具體參考這篇微軟教程)。
至此,問題解決。辦法應該是最笨的一種了,但優勢是不需要VBA,對沒有編程背景知識的用戶(Copyright ? https://blo友好g.csdn.net/s_gy_zetrov. All Rights Reserved)。
以上。
(Copyright ? https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)
visitor tracker
總結
以上是生活随笔為你收集整理的DSML_用Excel实现按行排序后按列排序,最后高亮重复值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python random.sample
- 下一篇: 小技巧-i标签与em标签和b标签与str