【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("队伍名称")

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值