有這麼一個需求,已經有幾個人問過我了,工作中還是經常遇到,看上去很簡單,但是Excel就是不好解決。是這樣的,有兩個表格(一個是100個商品的商品表格,另一個是300個城市的城市表格),需要把每個城市都對應100個商品的信息,也就是一個城市複製100行,然後把100個商品信息粘貼到後面。於是就需要不斷重複的複製粘貼很多遍,現實中還真有人這樣複製粘貼。畢竟是個問題,所以還是需要解決,找了一下,這個集合有個好聽的名字,叫笛卡爾積。
笛卡爾乘積是指在數學中,兩個集合X和Y的笛卡爾積,表示為X×Y,第一個對象是X的成員而第二個對象是Y的所有可能有序對的其中一個成員 。假設集合A={a, b},集合B={0, 1, 2},則兩個集合的笛卡爾積為{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
下面操作一下,後面順便放了一個打包的exe文件,可以拿去直接使用。先把案例數據導進來看看↓
import osimport pandas as pdos.chdir(r"E:\Python\小工具\笛卡爾積")
df1 = pd.read_excel(f"笛卡爾積數據.xlsx",sheet_name=0)df1['sup'] = 1
df2 = pd.read_excel(f"笛卡爾積數據.xlsx",sheet_name=1)df2['sup'] = 1可以看到,在一張Excel表裡裡面,讀取了兩個sheet。並且每個sheet裡面都加了一個輔助列。長下面這樣↓
操作很簡單,就是通多pandas的merge函數(具體介紹,點擊跳轉:Pandas03_數據合併、追加和連接),進行左右一個全連接,然後把輔助列刪了,在保存就完了。
a = pd.merge(df1,df2,how="outer",on='sup')del a['sup']a.to_excel(f"完成.xlsx")就這麼簡單,為什麼還要在這裡寫出來了,首先確實還是有用,關鍵是,這裡加了幾行代碼,把這個小功能打包成了一個可執行的exe文件,可以下載來直接用,複製下面這串連結就行了,有點長,不影響,也不要怕,是安全的,放在我自己的阿里雲存儲空間裡面。
https://linss.oss-cn-beijing.aliyuncs.com/Python/exe/%E7%AC%9B%E5%8D%A1%E5%B0%94%E9%9B%86%28Excel%E7%89%88%29v0.001.exe?Expires=1607872954&OSSAccessKeyId=TMP.3KhRrcAUUoxncGSoZExTuq6peJ5CcyRVkiNEsVW1r23js1XQa1o1WbfNKiHQHwe6bWqBrLRpqadKeArYz357LLvjc7NEPB&Signature=%2BrAS8UXeRiUUWa67thsc%2B9N5FIM%3D&versionId=CAEQExiBgMDg5OG.shciIDlhOGEwYzI1YjcyNDRiNmRhZWE2NzFhZWY4ZDk4M2Ux&response-content-type=application%2Foctet-stream下載下來,稍微有點大,也很粗糙,不過不影響嘛,電腦不差這點空間,將就能用就行了。長這樣↓
下面演示一下,看,還有溫馨的三行文字操作說明↓
好了,就這樣吧,後面如果有需要還可以繼續優化,有需求也可以做點新的小工具來自己用。