Py学习  »  Python

Python私活300元,给Excel表格打标签

蚂蚁学Python • 1 年前 • 357 次点击  


今天,再次收到蚂蚁老师推送的python开放需求,主要考验的是python操作excel的知识点,单子比较紧急,中午11:30收到,下午3:30要求完成。需求为:运用python操作excel文件,按公司分类进行数据统计,并按条件进行打标签。判定的条件主要为:1.高速增长:营业利润增长率大于10% 2.ST:连续两年营业利润为负 3.受疫情影响:报告期年份在2019及以后且营业利润为负 4.扭亏为盈:上期营业利润为负但本期营业利润为下 数据表如下:通过分析表中数据发现:同一公司没有集中在一起,报告年份也没有按序排列,所以,在进行标签判定前,首先要对数据进行处理。

df=pd.read_excel("基础数据.xlsx")
info={}
company=set(df["公司名称"])
for i in company:
    info[i]=df[df["公司名称"]==i]["公司名称"].count()
df["利润"]=df["营业收入(万元)"]-df["营业支出(万元)"]
df1=df.sort_values(["公司名称","报告期年份"])
以上代码,首先利用set对df公司名称去重,得到所有公司名称,将公司名称与出现次数存入字典,为后续操作提供便利。
同时增加利润列,算出每期利润值,作为之后标签判断的主要数据。
接着根据需求,运用sort_values对公司名称、报告年份进行排序重组,生成新的df1,也是后续操作的基础(之前也考虑使用groupby进行分组操作,后来改为现在思路)。
df1.reset_index(drop=True,inplace=True)

在后来操作中发现,因为排序打乱了索引,此处需要重置一下索引。接下来便是循环遍历打标签:

for i in range(len(df1.index)):
    if df1.loc[i, "报告期年份"] >= 2019 and df1.loc[i, "利润"]         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"利润"] 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, "利润"] "利润"]                 df1.loc[i+1, "ST"] = "是"
        except:
            continue

第一个循环具有通用性,直接遍历df中所有数据即可;接下来的操作,则需要循环遍历公司名称,遍历年份数据进行数据匹配,对应打标签。最后,将打好标签的数据处用pandas的to_excel导出为新的EXCEL文件,效果如下:

谢谢蚂蚁老师不断为大家提供实战的机会,这不仅是python友们学习提升的机会,更是思维改变生活、思维创造生活、思维服务生活的最好体现,相信每一位蚂蚁群的朋友们,在帅帅老师的引领下,一定会创造属于自己的更加美好、更加充实、更具挑战的新生活。


今晚来蚂蚁老师抖音直播间,Python带副业全套餐有优惠!!!




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/136254
 
357 次点击