task_练习

作业一

增加一列表示该公司该年份的收入熵指标

import numpy as np
import pandas as pd 
# 一、导入数据
df1 = pd.read_csv('../company.csv')
df1.head()
df2 = pd.read_csv('../company_data.csv')
df2.head()
#二、要根据df1对df2进行分类,可以用连接的方法构造一个新的DataFrame
df1.shape#(1048, 2)
df2.shape#(964022, 4)
## 要注意df1和df2的证券代码不一致的,并且df2的日期也要只需要年份。下面修改两项内容。
df1["证券代码"]=df1["证券代码"].apply(lambda x:int(x.split('#')[-1]))
df2["日期"] = pd.to_datetime(df2["日期"]).dt.year 
df_merge = df1.merge(df2,on=["证券代码","日期"],how='left')
df_merge
#三、根据公式计算I
gb = df_merge.groupby(["证券代码","日期"])['收入额']
df_merge['比例'] = gb.apply(lambda x:x/x.sum())
gb1 = df_merge.groupby(["证券代码","日期"])['比例']
def func(x):
    import numpy as np
    x = x.values
    x = x[x >= 0]
    x = x.reshape((-1,1))
    return -1 * np.log(x.T) @ x
#四、加入df1中
df1_new = gb.agg(func)
#由于收入有负值,所以会有异常值,这个问题话没有处理好

作业二

#不用df做出来了
# 1 读取数据
df = pd.read_excel('data/Pandas_huizong.xlsx')

# 观察目标数据,先将源文件的群名称和队伍名称设为列索引不动
df1=df.set_index(['所在群', '队伍名称'])

# 原表中队员是列值,需要转化为行值。首先考虑将列转化为行
df1.stack()
# 这个结果与目标表格有点相似了,但是还是不够。一是要去除行索引,二是要将名称和编号分开
def change(x):
    import pandas as pd
    import numpy as np
    x = x.dropna(axis='columns',how='all')
    #print(x.shape)
    x = x.values.reshape((-1,2))
    index = np.zeros((x.shape[0]), dtype=np.int)
    index[0] = 1
    Idx = pd.Index(index, name = '是否队长')
    
    return pd.DataFrame(data=x, columns=['编号', '昵称'],index=Idx )
df_new = gb.apply(change)
df_new.reset_index().drop(columns=['所在群'])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值