【JP】Task Special & Task 11 综合练习(2020.12)

题目:http://datawhale.club/t/topic/579/4

【任务一】企业收入的多样性

【题目描述】一个企业的产业收入多样性可以仿照信息熵的概念来定义收入熵指标:

\rm I=-\sum_{i}p(x_i)\log(p(x_i))

其中 p(xi) 是企业该年某产业收入额占该年所有产业总收入的比重。在company.csv中存有需要计算的企业和年份,在company_data.csv中存有企业、各类收入额和收入年份的信息。现请利用后一张表中的数据,在前一张表中增加一列表示该公司该年份的收入熵指标 I 。

df1 = pd.read_csv('../data/exercise/company.csv')
df2 = pd.read_csv('../data/exercise/company_data.csv')
def px(x):
    return -np.sum(x/x.sum()*np.log2(x/x.sum()))
df3 = df2.groupby(['日期','收入类型'])['收入额'].sum()
df3 = df3.reset_index()
df3 = df3.groupby('日期')['收入额'].apply(px).rename(index=lambda x: int(x[:4])).reset_index()
df1.merge(df3, on='日期',how='left').rename(columns={'收入额':'收入熵指标'}).head()

结果:

  证券代码    日期  收入熵指标
0  #000007  2014  5.633910
1  #000403  2015  5.753387
2  #000408  2016  5.704088
3  #000408  2017       NaN
4  #000426  2015  5.753387

【任务二】组队学习信息表的变换

【题目描述】请把组队学习的队伍信息表变换为如下形态,其中“是否队长”一列取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('../data/exercise/组队信息汇总表(Pandas).xlsx')
import re
def replaceName(x):
    obj = re.match("队员_群昵称\.(\d)",x)
    obj2 = re.match("队员(\d+)编号",x.replace(" ",""))
    if x == '队员_群昵称':
        return '群昵称_队员1'
    if x == '队长编号':
        return '编号_队长'
    if x == '队长_群昵称':
        return '群昵称_队长'
    if obj:
        return '群昵称_队员' + str(int(obj.group(1))+1)
    else:
        if obj2:
            return '编号_队员' + str(int(obj2.group(1)))
        return x
df = df.rename(columns=lambda x: replaceName(x))
df['tmpIndex'] = df.index

df = pd.wide_to_long(df, 
                stubnames=['群昵称','编号'],
                i=['队伍名称'],
                j='是否队长',
                sep="_",
                suffix='.+').swaplevel(0,1).rename(columns={'群昵称':'昵称'})
df = df.drop('所在群', axis = 1).reset_index(['队伍名称']).rename(index=lambda x: 1 if x == '队长' else 0).reset_index()
df = df.drop(df[pd.isnull(df.编号)].index).sort_values(['tmpIndex','是否队长'],ascending=[True,False]).drop(columns='tmpIndex').reset_index().drop(columns='index')

【任务三】

#1. 有多少县满足总投票数超过县人口数的一半
df1 = pd.read_csv('../data/exercise/county_population.csv')
df2 = pd.read_csv('../data/exercise/president_county_candidate.csv')
df1 = df1.set_index('US County')
new_idx = df1.index.map(lambda x:tuple(x.split(', ')))
df1.index = new_idx
df1 = df1.reset_index(level=0).rename_axis(index={'US County': 'State'}).reset_index().set_index('US County').rename(index=lambda x:x[1:]).reset_index()
df2 = df2.rename(columns={'state':'State', 'county':'US County'})
df3 = df2.merge(df1, on=['US County','State'],how='left')
df3['percent'] = df3['total_votes']/df3['Population']
df3.query('percent > 0.5')['US County'].count()
'''
74
'''
#2.把州(`state`)作为行索引,把投票候选人作为列名,列名的顺序按照候选人在全美的总票数由高到低排序,行列对应的元素为该候选人在该州获得的总票数
series1 = df2.groupby(['candidate'])['total_votes'].sum().sort_values(ascending=False)
df4 = df2.pivot_table(index='State',columns=['candidate'],values='total_votes',aggfunc='sum')
df4.columns = series1.index
df4
'''
candidate   Joe Biden   Donald Trump    Jo Jorgensen    Howie Hawkins   Write-ins   Rocky De La Fuente  Gloria La Riva  Kanye West  Don Blankenship Brock Pierce    ... Tom Hoefling    Ricki Sue King  Princess Jacob-Fambro   Blake Huber Richard Duncan  Joseph Kishore  Jordan Scott    Gary Swing  Keith McCormic  Zachary Scalf
State                                                                                   
Alabama NaN 7312.0  NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Alaska  NaN 34210.0 NaN NaN NaN NaN 825.0   NaN NaN NaN ... NaN NaN NaN NaN NaN NaN 318.0   NaN NaN NaN
Arizona NaN 2032.0  NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Arkansas    NaN NaN NaN NaN NaN 1713.0  2141.0  NaN NaN 1475.0  ... NaN 2812.0  NaN NaN NaN NaN 1321.0  NaN NaN NaN
California  NaN 80.0    NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN 60155.0 NaN NaN NaN
5 rows × 38 columns
'''
#3.每一个州下设若干县,定义拜登在该县的得票率减去川普在该县的得票率为该县的`BT`指标,若某个州所有县`BT`指标的中位数大于0,则称该州为`Biden State`,请找出所有的`Biden State`
df5=df2.merge(df2.groupby(['State','US County'])['total_votes'].sum().rename('county sum'), on=["State",'US County'],how='left')
df5['voteshare'] = df5['total_votes']/df5['county sum']
def test(x):
    biden = float(x.query('candidate=="Joe Biden"')['voteshare'])
    Trump = float(x.query('candidate=="Donald Trump"')['voteshare'])
    return str(biden-Trump) + "_" + x.name[1]
BTSeries = df5.groupby(['State','US County'])['candidate','voteshare'].apply(lambda x: test(x)).rename('result').reset_index().set_index('result')
new_idx =BTSeries.index.map(lambda x: tuple(x.split('_')))
BTSeries.index = new_idx
BTSeries = BTSeries.reset_index(level=0).rename_axis(index={'result': 'BT'}).reset_index()
BTSeries['result'] = BTSeries['result'].apply(lambda x:float(x))
BTSeries.groupby('State').filter(lambda x: x.median() > 0)['State'].drop_duplicates()
'''
197               California
319              Connecticut
488                 Delaware
491     District of Columbia
725                   Hawaii
1878           Massachusetts
2999              New Jersey
3536            Rhode Island
4065                 Vermont
'''
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 题目:http://datawhale.club/t/topic/579/4[http://datawhale.c...
    叶小刀_b59f阅读 144评论 0 0
  • 1、【任务一】企业收入的多样性 【题目描述】一个企业的产业收入多样性可以仿照信息熵的概念来定义收入熵指标: I=−...
    58506fd3fbed阅读 148评论 0 0
  • 数据集下载地址:https://gitee.com/lbwnb_lbwnb/learning_pandas_dat...
    陈易男阅读 237评论 0 0
  • 我的图书馆 留言交流 2000个最常用的英语单词 2016-05-15酴羰骀璺 2000个最常用的英语单词 (英语...
    Mr_Wang92阅读 634评论 0 0
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,233评论 0 13