【pandas】special task

【任务一】企业收入的多样性

【题目描述】一个企业的产业收入多样性可以仿照信息熵的概念来定义收入熵指标:
I = − ∑ p ( x i ) l o g ( p ( x i ) ) I = -\sum p(x_i)log(p(x_i)) I=p(xi)log(p(xi))

其中 p ( x i ) p(x_i) p(xi)是企业该年某产业收入额占该年所有产业总收入的比重。在company.csv中存有需要计算的企业和年份,在company_data.csv中存有企业、各类收入额和收入年份的信息。现请利用后一张表中的数据,在前一张表中增加一列表示该公司该年份的收入熵指标 I。

import pandas as pd 
import numpy as np
df_company = pd.read_csv('../data/task_special/Company.csv')
df_compdata = pd.read_csv("../data/task_special/Company_data.csv")
df_company["日期"] = df_company["日期"].apply(lambda x:str(x))
df_company.head()

stkcd = df_company['证券代码'].apply(lambda x: str(int(x[1:7])))
df_compdata["证券代码"] = df_compdata["证券代码"].apply(lambda x:str(x))
df_compdata = df_compdata.set_index("证券代码")
df_selected = df_compdata.loc[stkcd]
df_selected["日期"] = df_selected["日期"].apply(lambda x:x[0:4])
df_selected["收入熵"] = df_selected.reindex().groupby(["证券代码","日期"])["收入额"].transform(lambda x:x/x.sum())
entropy = df_selected.reindex().groupby(["证券代码","日期"])["收入熵"].agg(lambda x: -np.sum(x*np.log(x)))
entropy = entropy.reset_index()
entropy = entropy.rename(columns = {
    
    "证券代码":"stkcd"})
df_company["stkcd"] = stkcd
df_company = df_company.merge(entropy, how="left", on=["stkcd","日期"])
df_company.drop("stkcd", axis=1)

在这里插入图片描述
【任务二】组队学习信息表的变换

【题目描述】请把组队学习的队伍信息表变换为如下形态,其中“是否队长”一列取1表示队长,否则为0

在这里插入图片描述

df_teaminfo = pd.read_excel("../data/task_special/组队信息汇总表(Pandas).xlsx")
df_teaminfo.head()
df_new = df_teaminfo["队伍名称"]
for col in zip(df_teaminfo.columns[2:24:2],df_teaminfo.columns[3:24:2]):
#     print(pd.Series(list(zip(df_teaminfo[list(col)].values))))
    df_new = pd.concat([df_new,pd.Series(list(zip(df_teaminfo[list(col)].values)))], axis=1)
df_new.columns = ["队伍名称","队长"]+["队员_"+str(i) for i in range(1,11)]

在这里插入图片描述

df_new = df_new.melt(id_vars=["队伍名称"],
                     value_vars=["队长"] +
                     ["队员_" + str(i) for i in range(1, 11)],
                     value_name="信息",
                     var_name="是否队长")
df_new['是否队长'].mask(df_new['是否队长']!="队长",0,inplace=True)
df_new['是否队长'].mask(df_new['是否队长']=="队长",1,inplace=True)
df_new["编号"] = df_new['信息'].apply(lambda x: x[0][0])
df_new["昵称"] = df_new['信息'].apply(lambda x: x[0][1])
df_new.drop('信息', axis=1, inplace=True)
df_new.dropna(inplace=True)
df_new["编号"] = df_new['编号'].apply(lambda x: int(x))
df_new.sort_values("队伍名称")

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41545602/article/details/112080616