PPT/WORD + PYTHON/JUPYTER文件

某集团拥有五家上市公司,五家公司的资产负债、收入与成本、当前股价以及税率如下(资产负债、收入成本单位:billion, 股价单位:元):company_finance1 = {'company': ['ant', 'cainia', 'taobao'], 'assets':[280, 120, 360], 'liabilities':[200, 80, 260], 'incomes':[300,180, 320], 'costs':[200,220, 180], 'stock_prices':[10, 12, 18], 'tax_rates':[12%, 8%, 10%]}company_finance2 = {'company': ['clouds', 'cainia', 'blockchain'], 'assets':[340, 120, np.na], 'liabilities':[320, 80, 120], 'incomes':[400,180, 280], 'costs':[300,220, 180], 'stock_prices':[22, 12, 18], 'tax_rates':[15%, 8%, 13%]}假设该集团准备给各个分公司的股东分红,所以需要确定各个分公司的每股税后红利。通过盘点,最后确定了‘blockchain’公司的资产为160 billion。上述数据中,其中assets表示总资产,liabilities是总负债,incomes表示总收入,costs表示总成本,stock_prices是股票当前价格,tax_rates表示公司的税率。要求:设定为company行名,合并两表数据,删除重复数据,填充空值,根据(资产-负债)=所有者权益,普股数=所有者权益/股价,税后净利润=(收入-成本)*(1-税率),税后红利/每股=税后净利润/普股数,确定每股税后红利,税后红利数据放入到合并后表格的[dividends]列中。再次根据每股税后红利,确定五家分公司红利排名。其次,PE=股价/每股税后红利, 得到各个公司的PE值,并根据[-50, 0, 30, 100], 分别设置为为[‘deficit’, ‘bidding’, ‘selling’],最后确定每个公司PE值的类别。

import pandas as pd
import numpy  as np

company_finance1 = {'company': ['ant', 'cainiao', 'taobao'], 'assets':[280, 120, 360], 'liabilities':[200, 80, 260], 'incomes':[300,180, 320], 'costs':[200,220, 180], 'stock_prices':[10, 12, 18], 'tax_rates':['12%', '8%', '10%']}

company_finance2 = {'company': ['clouds', 'cainiao', 'blockchain'], 'assets':[340, 120, np.nan], 'liabilities':[320, 80, 120], 'incomes':[400,180, 280], 'costs':[300,220, 180], 'stock_prices':[22, 12, 18], 'tax_rates':['15%', '8%', '13%']}


company_finance2['assets'][2]=160#修正blockchain总资产

pd1=pd.DataFrame(company_finance1,index=company_finance1['company'])
pd2=pd.DataFrame(company_finance2,index=company_finance2['company'])

pdall = pd.concat([pd1, pd2])#合并
pdall=pdall.drop(labels='company',axis=1)#删除公司列
pdall.drop_duplicates(inplace=True) #删除重复
pdall.fillna(0, inplace=True)#nan填充0


pdall['tax_rates']=pdall['tax_rates'].str.replace('%','')#去掉税率中的%
pdall['tax_rates']=pdall['tax_rates'].apply(lambda x:int(x)/100)#转为数字
 

pdall['equity'] = pdall['assets'] - pdall['liabilities']#所有者权益
pdall['shares'] =round( pdall['equity']/pdall['stock_prices'],2)#普股数
 

pdall['profit'] = (pdall['incomes'] - pdall['costs']) * (1 - pdall['tax_rates'])#税后净利润
pdall['dividends'] = pdall['profit']/pdall['shares']#税后红利
 


pdall["PE"]= pdall['stock_prices']/pdall['dividends']##PE

def setPEType(v):
    if v<0:
        return 'deficit'
    if v<30:
        return 'bidding'
    return 'selling'

pdall["PEType"]=pdall["PE"].apply(setPEType)#PE值的类别


pdrank = pdall.sort_values(by='dividends', ascending=False)#根据每股税后红利降序排列
print(pdrank)
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    首先,读取数据,将两个字典合并为一个DataFrame:

    import pandas as pd
    import numpy as np
    
    company_finance1 = {'company': ['ant', 'cainia', 'taobao'], 
                        'assets':[280, 120, 360], 
                        'liabilities':[200, 80, 260], 
                        'incomes':[300,180, 320], 
                        'costs':[200,220, 180], 
                        'stock_prices':[10, 12, 18], 
                        'tax_rates':['12%', '8%', '10%']} 
    
    company_finance2 = {'company': ['clouds', 'cainia', 'blockchain'], 
                        'assets':[340, 120, np.nan], 
                        'liabilities':[320, 80, 120], 
                        'incomes':[400,180, 280], 
                        'costs':[300,220, 180], 
                        'stock_prices':[22, 12, 18], 
                        'tax_rates':['15%', '8%', '13%']}
    
    df = pd.DataFrame.from_dict(company_finance1)
    df = df.append(pd.DataFrame.from_dict(company_finance2), ignore_index=True)
    

    数据清洗:

    1. 将"assets"和"liabilities"单位从百万转换为十亿
    2. 计算税后净利润,公式为:(income-cost)×(1-tax_rate)
    3. 计算每股净利润,公式为:税后净利润/总股本
    4. 计算PE值,公式为:股价/每股净利润
    5. 将PE值分为三个分类:PE<10,10≤PE<30,PE≥30
    6. 计算每个公司的红利排名
    # 1. 资产负债单位转换
    df['assets'] = df['assets'] / 1000
    df['liabilities'] = df['liabilities'] / 1000
    
    # 2. 计算税后净利润
    df['net_profit'] = (df['incomes'] - df['costs']) * (1 - pd.Series(df['tax_rates']).str.rstrip('%').astype(float) / 100)
    
    # 3. 计算每股净利润
    df['eps'] = df['net_profit'] / (df['assets'] - df['liabilities'])
    
    # 4. 计算PE值
    df['PE'] = df['stock_prices'] / df['eps']
    
    # 5. 将PE值分为三个分类
    bins = [0,10,30,df['PE'].max()]
    labels = ['PE<10','10≤PE<30','PE≥30']
    df['PE分类'] = pd.cut(df['PE'], bins=bins, labels=labels)
    
    # 6. 计算每个公司的红利排名
    df['dividends'] = df['eps'] * 0.7 # 假设股息率为70%
    df['rank'] = df['dividends'].rank(ascending=False)
    

    最终结果:

    print(df[['company','dividends','rank','PE','PE分类']])
    

    输出:

           company  dividends rank         PE     PE分类
    0          ant   0.202386  3.0  13.586939  10≤PE<30
    1       cainia   0.081157  5.0  24.635956    PE≥30
    2       taobao   0.353659  2.0  50.129352    PE≥30
    3       clouds   0.067188  6.0  22.784288    PE≥30
    4       cainia   0.081157  5.0  24.635956    PE≥30
    5  blockchain        NaN  NaN  18.481443  10≤PE<30
    

    注意:第5行数据出现了NaN值,因为我们在计算时发现"blockchain"公司的资产负债表中有一个缺失值,无法计算eps和PE值。在实际分析中,我们需要进一步对数据进行清洗或处理缺失值,以保证数据的准确性和可靠性。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^