Python私活300元,給Excel表格打標(biāo)簽
今天,再次收到螞蟻老師推送的python開放需求,主要考驗(yàn)的是python操作excel的知識點(diǎn),單子比較緊急,中午11:30收到,下午3:30要求完成。需求為:運(yùn)用python操作excel文件,按公司分類進(jìn)行數(shù)據(jù)統(tǒng)計(jì),并按條件進(jìn)行打標(biāo)簽。判定的條件主要為:1.高速增長:營業(yè)利潤增長率大于10%
2.ST:連續(xù)兩年?duì)I業(yè)利潤為負(fù)
3.受疫情影響:報(bào)告期年份在2019及以后且營業(yè)利潤為負(fù)
4.扭虧為盈:上期營業(yè)利潤為負(fù)但本期營業(yè)利潤為下
數(shù)據(jù)表如下:
通過分析表中數(shù)據(jù)發(fā)現(xiàn):同一公司沒有集中在一起,報(bào)告年份也沒有按序排列,所以,在進(jìn)行標(biāo)簽判定前,首先要對數(shù)據(jù)進(jìn)行處理。
df=pd.read_excel("基礎(chǔ)數(shù)據(jù).xlsx")
info={}
company=set(df["公司名稱"])
for i in company:
info[i]=df[df["公司名稱"]==i]["公司名稱"].count()
df["利潤"]=df["營業(yè)收入(萬元)"]-df["營業(yè)支出(萬元)"]
df1=df.sort_values(["公司名稱","報(bào)告期年份"])
以上代碼,首先利用set對df公司名稱去重,得到所有公司名稱,將公司名稱與出現(xiàn)次數(shù)存入字典,為后續(xù)操作提供便利。
同時(shí)增加利潤列,算出每期利潤值,作為之后標(biāo)簽判斷的主要數(shù)據(jù)。
接著根據(jù)需求,運(yùn)用sort_values對公司名稱、報(bào)告年份進(jìn)行排序重組,生成新的df1,也是后續(xù)操作的基礎(chǔ)(之前也考慮使用groupby進(jìn)行分組操作,后來改為現(xiàn)在思路)。df1.reset_index(drop=True,inplace=True)
在后來操作中發(fā)現(xiàn),因?yàn)榕判虼騺y了索引,此處需要重置一下索引。接下來便是循環(huán)遍歷打標(biāo)簽:
for i in range(len(df1.index)):
if df1.loc[i, "報(bào)告期年份"] >= 2019 and df1.loc[i, "利潤"] < 0:
df1.loc[i, "受疫情影響"] = "是"
for j in info.keys():
for i in range(len(df1.index)-1):
try:
if df1.loc[i,"公司名稱"]==j and df1.loc[i+1,"公司名稱"]==j and df1.loc[i,"利潤"]*1.1<df1.loc[i+1,"利潤"] and df1.loc[i+1,"利潤"]>0:
df1.loc[i+1,"高速增長"]="是"
if df1.loc[i,"公司名稱"]==j and df1.loc[i,"利潤"]<0 and df1.loc[i+1,"利潤"]>0:
df1.loc[i+1, "扭虧為盈"] = "是"
if df1.loc[i, "公司名稱"] == j and df1.loc[i, "利潤"] < 0 and df1.loc[i + 1, "利潤"] < 0:
df1.loc[i+1, "ST"] = "是"
except:
continue
第一個(gè)循環(huán)具有通用性,直接遍歷df中所有數(shù)據(jù)即可;接下來的操作,則需要循環(huán)遍歷公司名稱,遍歷年份數(shù)據(jù)進(jìn)行數(shù)據(jù)匹配,對應(yīng)打標(biāo)簽。最后,將打好標(biāo)簽的數(shù)據(jù)處用pandas的to_excel導(dǎo)出為新的EXCEL文件,效果如下:
謝謝螞蟻老師不斷為大家提供實(shí)戰(zhàn)的機(jī)會,這不僅是python友們學(xué)習(xí)提升的機(jī)會,更是思維改變生活、思維創(chuàng)造生活、思維服務(wù)生活的最好體現(xiàn),相信每一位螞蟻群的朋友們,在帥帥老師的引領(lǐng)下,一定會創(chuàng)造屬于自己的更加美好、更加充實(shí)、更具挑戰(zhàn)的新生活。
今晚來螞蟻老師抖音直播間,Python帶副業(yè)全套餐有優(yōu)惠?。?!

