import pandas as pd
import numpy as np
df1 = pd. read_csv( 'company.csv' )
df1. head( )
证券代码 日期 0 #000007 2014 1 #000403 2015 2 #000408 2016 3 #000408 2017 4 #000426 2015
df2 = pd. read_csv( 'company_data.csv' )
df2. head( )
证券代码 日期 收入类型 收入额 0 1 2008/12/31 1 1.084218e+10 1 1 2008/12/31 2 1.259789e+10 2 1 2008/12/31 3 1.451312e+10 3 1 2008/12/31 4 1.063843e+09 4 1 2008/12/31 5 8.513880e+08
由于df1和df2的证券代码和日期不匹配
df1_copy = df1. copy( )
df1_copy[ '证券代码' ] = df1_copy[ '证券代码' ] . apply ( lambda x: x. strip( '#' ) . lstrip( '0' ) ) . astype( 'int64' )
df1_copy. head( )
证券代码 日期 0 7 2014 1 403 2015 2 408 2016 3 408 2017 4 426 2015
df2[ '日期' ] = df2[ '日期' ] . str [ : 4 ] . astype( 'int64' )
df2. head( )
证券代码 日期 收入类型 收入额 0 1 2008 1 1.084218e+10 1 1 2008 2 1.259789e+10 2 1 2008 3 1.451312e+10 3 1 2008 4 1.063843e+09 4 1 2008 5 8.513880e+08
def func ( xi) :
if xi. any ( ) :
p_x = xi/ xi. sum ( )
entropy = - ( p_x * np. log10( p_x) ) . sum ( )
return entropy
else :
return np. nan
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)
证券代码 日期 收入额 0 7 2014 1.333485 1 403 2015 1.211936 2 408 2016 1.224077 3 408 2017 NaN 4 426 2015 1.339480
df1[ '收入熵指标' ] = res[ '收入额' ]
df1. head( )
证券代码 日期 收入熵指标 0 #000007 2014 1.333485 1 #000403 2015 1.211936 2 #000408 2016 1.224077 3 #000408 2017 NaN 4 #000426 2015 1.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 0 Pandas数据分析 你说的都对队 5 山枫叶纷飞 6 蔡 7.0 安慕希 8.0 信仰 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1 Pandas数据分析 熊猫人 175 鱼呲呲 44 Heaven 37.0 吕青 50.0 余柳成荫 ... 25.0 Never say never 55.0 K 120.0 Y. 28.0 X.Y.Q 151.0 swrong 2 Pandas数据分析 中国移不动 107 Y's 124 🥕 75.0 Vito 146.0 张小五 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3 Pandas数据分析 panda 11 太下真君 35 柚子 108.0 My 42.0 星星点灯 ... 157.0 Zys 158.0 不器 102.0 嘉平佑染 NaN NaN NaN NaN 4 Pandas数据分析 一路向北 13 黄元帅 15 化 16.0 未期 18.0 太陽光下 ... 23.0 🚀 169.0 听风 189.0 Cappuccino NaN NaN NaN NaN
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 山枫叶纷飞 6 蔡 7.0 安慕希 8.0 信仰 20.0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1 熊猫人 175 鱼呲呲 44 Heaven 37.0 吕青 50.0 余柳成荫 82.0 ... 25.0 Never say never 55.0 K 120.0 Y. 28.0 X.Y.Q 151.0 swrong 2 中国移不动 107 Y's 124 🥕 75.0 Vito 146.0 张小五 186.0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3 panda 11 太下真君 35 柚子 108.0 My 42.0 星星点灯 45.0 ... 157.0 Zys 158.0 不器 102.0 嘉平佑染 NaN NaN NaN NaN 4 一路向北 13 黄元帅 15 化 16.0 未期 18.0 太陽光下 19.0 ... 23.0 🚀 169.0 听风 189.0 Cappuccino NaN NaN NaN NaN
5 rows × 23 columns
col_leader = np. array( [ '队伍名称' , '编号_队长_1' , '昵称_队长_1' ] )
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 山枫叶纷飞 6 蔡 7.0 安慕希 8.0 信仰 20.0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1 熊猫人 175 鱼呲呲 44 Heaven 37.0 吕青 50.0 余柳成荫 82.0 ... 25.0 Never say never 55.0 K 120.0 Y. 28.0 X.Y.Q 151.0 swrong 2 中国移不动 107 Y's 124 🥕 75.0 Vito 146.0 张小五 186.0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3 panda 11 太下真君 35 柚子 108.0 My 42.0 星星点灯 45.0 ... 157.0 Zys 158.0 不器 102.0 嘉平佑染 NaN NaN NaN NaN 4 一路向北 13 黄元帅 15 化 16.0 未期 18.0 太陽光下 19.0 ... 23.0 🚀 169.0 听风 189.0 Cappuccino NaN NaN NaN NaN
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_0 蔡 6.0 队员2_0 安慕希 7.0 队员3_0 信仰 8.0 队员4_0 biubiu🙈🙈 20.0 队员5_0 NaN NaN 队员6_0 NaN NaN 队员7_0 NaN NaN 队员8_0 NaN NaN 队员9_0 NaN NaN 队员10_0 NaN NaN 1 熊猫人 队长_1 鱼呲呲 175.0 队员1_0 Heaven 44.0 队员2_0 吕青 37.0 队员3_0 余柳成荫 50.0 队员4_0 Kuroe 82.0 队员5_0 啊翟翟 60.0 队员6_0 Never say never 25.0 队员7_0 K 55.0 队员8_0 Y. 120.0
res = res. dropna( ) . reset_index( )
res = res. drop( columns= 'index' )
res. head( 20 )
队伍名称 是否队长 昵称 编号 0 你说的都对队 队长_1 山枫叶纷飞 5.0 1 你说的都对队 队员1_0 蔡 6.0 2 你说的都对队 队员2_0 安慕希 7.0 3 你说的都对队 队员3_0 信仰 8.0 4 你说的都对队 队员4_0 biubiu🙈🙈 20.0 5 熊猫人 队长_1 鱼呲呲 175.0 6 熊猫人 队员1_0 Heaven 44.0 7 熊猫人 队员2_0 吕青 37.0 8 熊猫人 队员3_0 余柳成荫 50.0 9 熊猫人 队员4_0 Kuroe 82.0 10 熊猫人 队员5_0 啊翟翟 60.0 11 熊猫人 队员6_0 Never say never 25.0 12 熊猫人 队员7_0 K 55.0 13 熊猫人 队员8_0 Y. 120.0 14 熊猫人 队员9_0 X.Y.Q 28.0 15 熊猫人 队员10_0 swrong 151.0 16 中国移不动 队长_1 Y's 107.0 17 中国移不动 队员1_0 🥕 124.0 18 中国移不动 队员2_0 Vito 75.0 19 中国移不动 队员3_0 张小五 146.0
res[ '是否队长' ] = res[ '是否队长' ] . str [ - 1 ]
res[ '编号' ] = res[ '编号' ] . astype( 'int64' )
res
队伍名称 是否队长 昵称 编号 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
146 rows × 4 columns
order = [ '是否队长' , '队伍名称' , '昵称' , '编号' ]
res[ order]
是否队长 队伍名称 昵称 编号 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
146 rows × 4 columns