综合练习11

import pandas as pd
import numpy as np
df1 = pd.read_csv('company.csv')
df1.head()
证券代码日期
0#0000072014
1#0004032015
2#0004082016
3#0004082017
4#0004262015
df2 = pd.read_csv('company_data.csv')
df2.head()
证券代码日期收入类型收入额
012008/12/3111.084218e+10
112008/12/3121.259789e+10
212008/12/3131.451312e+10
312008/12/3141.063843e+09
412008/12/3158.513880e+08

由于df1和df2的证券代码和日期不匹配

# 去掉前面的#和0
# 不copy,会报'int' object has no attribute 'strip'
df1_copy = df1.copy()
df1_copy['证券代码'] = df1_copy['证券代码'].apply(lambda x:x.strip('#').lstrip('0')).astype('int64')
df1_copy.head()
证券代码日期
072014
14032015
24082016
34082017
44262015
# 取年份
df2['日期'] = df2['日期'].str[:4].astype('int64')
df2.head()
证券代码日期收入类型收入额
01200811.084218e+10
11200821.259789e+10
21200831.451312e+10
31200841.063843e+09
41200858.513880e+08
def func(xi):
    if xi.any():
        p_x = xi/xi.sum() #求p(xi)
        entropy = -(p_x * np.log10(p_x)).sum()
        return entropy
    else:  #跳过nan值的
        return np.nan
# 两张表以证券代码和日期(年份)作为索引,遍历求收入额
# reset_index用于保持收入额列
res = df1_copy.merge(df2, on=['证券代码','日期'], how='left').groupby(['证券代码','日期'])
res = res['收入额'].apply(func).reset_index()
res.head()
E:\Anaconda\lib\site-packages\pandas\core\series.py:726: RuntimeWarning: divide by zero encountered in log10
  result = getattr(ufunc, method)(*inputs, **kwargs)
E:\Anaconda\lib\site-packages\pandas\core\series.py:726: RuntimeWarning: invalid value encountered in log10
  result = getattr(ufunc, method)(*inputs, **kwargs)
证券代码日期收入额
0720141.333485
140320151.211936
240820161.224077
34082017NaN
442620151.339480
# 在前一张表中增加一列表示该公司该年份的收入熵指标 
df1['收入熵指标'] = res['收入额']
df1.head()
证券代码日期收入熵指标
0#00000720141.333485
1#00040320151.211936
2#00040820161.224077
3#0004082017NaN
4#00042620151.339480

题目二
请把组队学习的队伍信息表变换为如下形态,其中“是否队长”一列取1表示队长,否则为0
是否队长 队伍名称 昵称 编号
0 1 你说的都对队 山枫叶纷飞 5
1 0 你说的都对队 蔡 6
2 0 你说的都对队 安慕希 7
3 0 你说的都对队 信仰 8
4 0 你说的都对队 biubiu🙈🙈 20
… … … … …
141 0 七星联盟 Daisy 63
142 0 七星联盟 One Better 131
143 0 七星联盟 rain 112
144 1 应如是 思无邪 54
145 0 应如是 Justzer0 58

df = pd.read_excel('组队信息汇总表.xlsx')
df.head()
所在群队伍名称队长编号队长_群昵称队员1 编号队员_群昵称队员2 编号队员_群昵称.1队员3 编号队员_群昵称.2...队员6 编号队员_群昵称.5队员7 编号队员_群昵称.6队员8 编号队员_群昵称.7队员9 编号队员_群昵称.8队员10编号队员_群昵称.9
0Pandas数据分析你说的都对队5山枫叶纷飞67.0安慕希8.0信仰...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
1Pandas数据分析熊猫人175鱼呲呲44Heaven37.0吕青50.0余柳成荫...25.0Never say never55.0K120.0Y.28.0X.Y.Q151.0swrong
2Pandas数据分析中国移不动107Y's124🥕75.0Vito146.0张小五...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
3Pandas数据分析panda11太下真君35柚子108.0My42.0星星点灯...157.0Zys158.0不器102.0嘉平佑染NaNNaNNaNNaN
4Pandas数据分析一路向北13黄元帅1516.0未期18.0太陽光下...23.0🚀169.0听风189.0CappuccinoNaNNaNNaNNaN

5 rows × 24 columns

# 删除所在群这列
df.drop(df.columns[0], axis=1, inplace=True)
df.reset_index()
df.head()
队伍名称队长编号队长_群昵称队员1 编号队员_群昵称队员2 编号队员_群昵称.1队员3 编号队员_群昵称.2队员4 编号...队员6 编号队员_群昵称.5队员7 编号队员_群昵称.6队员8 编号队员_群昵称.7队员9 编号队员_群昵称.8队员10编号队员_群昵称.9
0你说的都对队5山枫叶纷飞67.0安慕希8.0信仰20.0...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
1熊猫人175鱼呲呲44Heaven37.0吕青50.0余柳成荫82.0...25.0Never say never55.0K120.0Y.28.0X.Y.Q151.0swrong
2中国移不动107Y's124🥕75.0Vito146.0张小五186.0...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
3panda11太下真君35柚子108.0My42.0星星点灯45.0...157.0Zys158.0不器102.0嘉平佑染NaNNaNNaNNaN
4一路向北13黄元帅1516.0未期18.0太陽光下19.0...23.0🚀169.0听风189.0CappuccinoNaNNaNNaNNaN

5 rows × 23 columns

col_leader = np.array(['队伍名称','编号_队长_1','昵称_队长_1'])
# 1-10个队员
col_member = np.array([[f'编号_队员{i}_0', f'昵称_队员{i}_0']for i in range(1,11)]).flatten()
df.columns = np.r_[col_leader,col_member]
df.head()
队伍名称编号_队长_1昵称_队长_1编号_队员1_0昵称_队员1_0编号_队员2_0昵称_队员2_0编号_队员3_0昵称_队员3_0编号_队员4_0...编号_队员6_0昵称_队员6_0编号_队员7_0昵称_队员7_0编号_队员8_0昵称_队员8_0编号_队员9_0昵称_队员9_0编号_队员10_0昵称_队员10_0
0你说的都对队5山枫叶纷飞67.0安慕希8.0信仰20.0...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
1熊猫人175鱼呲呲44Heaven37.0吕青50.0余柳成荫82.0...25.0Never say never55.0K120.0Y.28.0X.Y.Q151.0swrong
2中国移不动107Y's124🥕75.0Vito146.0张小五186.0...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
3panda11太下真君35柚子108.0My42.0星星点灯45.0...157.0Zys158.0不器102.0嘉平佑染NaNNaNNaNNaN
4一路向北13黄元帅1516.0未期18.0太陽光下19.0...23.0🚀169.0听风189.0CappuccinoNaNNaNNaNNaN

5 rows × 23 columns

res = pd.wide_to_long(df.reset_index(),
                        stubnames = ['昵称','编号'],
                        i = ['index','队伍名称'],
                        j = '是否队长',
                        sep = '_',
                        suffix = '.+')
res.head(20)
昵称编号
index队伍名称是否队长
0你说的都对队队长_1山枫叶纷飞5.0
队员1_06.0
队员2_0安慕希7.0
队员3_0信仰8.0
队员4_0biubiu🙈🙈20.0
队员5_0NaNNaN
队员6_0NaNNaN
队员7_0NaNNaN
队员8_0NaNNaN
队员9_0NaNNaN
队员10_0NaNNaN
1熊猫人队长_1鱼呲呲175.0
队员1_0Heaven44.0
队员2_0吕青37.0
队员3_0余柳成荫50.0
队员4_0Kuroe82.0
队员5_0啊翟翟60.0
队员6_0Never say never25.0
队员7_0K55.0
队员8_0Y.120.0
# 删除表中所有nan的行,并把第一列index拆开到该索引下的每一行
res = res.dropna().reset_index()
res = res.drop(columns='index')
res.head(20)
队伍名称是否队长昵称编号
0你说的都对队队长_1山枫叶纷飞5.0
1你说的都对队队员1_06.0
2你说的都对队队员2_0安慕希7.0
3你说的都对队队员3_0信仰8.0
4你说的都对队队员4_0biubiu🙈🙈20.0
5熊猫人队长_1鱼呲呲175.0
6熊猫人队员1_0Heaven44.0
7熊猫人队员2_0吕青37.0
8熊猫人队员3_0余柳成荫50.0
9熊猫人队员4_0Kuroe82.0
10熊猫人队员5_0啊翟翟60.0
11熊猫人队员6_0Never say never25.0
12熊猫人队员7_0K55.0
13熊猫人队员8_0Y.120.0
14熊猫人队员9_0X.Y.Q28.0
15熊猫人队员10_0swrong151.0
16中国移不动队长_1Y's107.0
17中国移不动队员1_0🥕124.0
18中国移不动队员2_0Vito75.0
19中国移不动队员3_0张小五146.0
res['是否队长'] = res['是否队长'].str[-1]
res['编号'] = res['编号'].astype('int64')
res
队伍名称是否队长昵称编号
0你说的都对队1山枫叶纷飞5
1你说的都对队06
2你说的都对队0安慕希7
3你说的都对队0信仰8
4你说的都对队0biubiu🙈🙈20
...............
141七星联盟0Daisy63
142七星联盟0One Better131
143七星联盟0rain112
144应如是1思无邪54
145应如是0Justzer058

146 rows × 4 columns

order = ['是否队长','队伍名称','昵称','编号']
res[order]
是否队长队伍名称昵称编号
01你说的都对队山枫叶纷飞5
10你说的都对队6
20你说的都对队安慕希7
30你说的都对队信仰8
40你说的都对队biubiu🙈🙈20
...............
1410七星联盟Daisy63
1420七星联盟One Better131
1430七星联盟rain112
1441应如是思无邪54
1450应如是Justzer058

146 rows × 4 columns

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值