Pandas数据分析-Task7
记录DataWhale的Pandas数据分析的学习过程,本次是期中测试,测试前面6章学的怎么样(划水的菜鸡瑟瑟发抖)。本篇文章中的测试题及源数据可以从此链接中下载,需要的童鞋可以点击链接自取。
【任务一】企业收入的多样性
思路:有两个表company和company_data,最后的结果应该是两个表连接成一个表,需要在company_data这个表中统计出熵,基本方法是先根据证券代码和日期分组求和,然后使用变换transform()方法将 p ( x i ) ∗ l o g ( p ( x i ) ) p(x_i)*log(p(x_i)) p(xi)∗log(p(xi))入到company_data表中,然后再根据先根据证券代码和日期分组求和,即可求出熵。
import pandas as pd
import numpy as np
df1 = pd.read_csv('company.csv')
df2 = pd.read_csv('company_data.csv')
df2=df2.loc[df2['收入额']>0,:]#df2中有负值,无法计算熵,所以先把负值所在的列删掉。
gb=df2.groupby(['证券代码','日期'])['收入额']#根据证券代码和日期分组
s1=df2['收入额']/gb.transform('sum')#使用变换transform()方法,求每一行收入与当年总收入的比例。
df2['temp']=-s1*np.log(s1)
df3=df2.groupby(['证券代码','日期'])['temp'].agg([('熵','sum')]).reset_index()#使用聚合函数求熵,生成新的表df3
df3['日期']=df3['日期'].apply(lambda x:int(x.split('/')[0]))#将表df3的日期一列改为和df1类型一样的方式,方便后面与df1连接
df1['证券代码']=df1[