筆者這次是第一次寫東西,主要是想把在運用中的一些執行個體給記錄下來,分享給那些和筆者有同樣需求的人。可能分享的方法有些累贅或者不準确,還望各位大佬勿噴,因為筆者也是python小白,這些都是通過搜尋彙總得出來的。
需求:
原資料格式:

我們要變成下面的樣子:(這裡是做了分組和求和)
解決需求:
#資料是直接從資料庫中查出來的,是以直接導入excel的資料,也可以直接連資料進行查詢。
import pandas as pd
info_new2=pd.read_excel("E:/路徑/檔案名.xlsx", sheet_name='sheet名')
#将網站和營運商設定為索引
info_1 = info_new2.set_index(['target','optname'])
print(info_1)
#篩選出IP字段
ip = info_1['idcip']
#将idcip列以‘,’分開,分成多列
ipdf = ip.str.split(',',expand = True)
#将列轉換為行
ip = ipdf.stack()
#将最後一級索引删除
ip = ip.reset_index(drop=True,level=-1)
#再調用一次reset_index,會自動進行笛卡爾乘積
ipdf = ip.reset_index()
#将自動生成的0列進行重命名
ipdf = ipdf.rename(columns={0:'idcip'})
print(ipdf)
#後面将idcsize,idcdelay,idcipnum進行同樣的操作。隻是這三個字段在後面會求和計算,需要将類型轉換為數字型。
#将時延列有文本轉為數字型
info_delay= pd.to_numeric(delaydf['idcdelay'],errors='coerce')#合并,按照網站和營運商和IP合并info_two=pd.concat([ipdf,info_delay,info_ipnum,info_size],axis=1)
#去除idcdelay列為空的行info_two = info_two[info_two['idcdelay'].notna()]
#按照'target','idcip','optname'分組,'idcdelay','idcipnum','idcsize'分别求和info_he=info_two.groupby(['target','idcip','optname'])['idcdelay','idcipnum','idcsize'].sum()
#寫入excelinfo_he.to_excel("E:\\位址\\檔案名.xlsx", sheet_name=sheet名)
大功告成!(第一次發表,希望大家多多包涵!)