python跟jupyter文件

之分公司数据清洗与核算
某集团拥有五家上市公司,五家公司的资产负债、收入与成本、当前股价以及税率如下(资产负债、收入成本单位:billion, 股价单位:元):
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.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]列中。最后根据每股税后红利,确定五家分公司红利排名。

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']
 

pdrank = pdall.sort_values(by='dividends', ascending=False)#根据每股税后红利降序排列
 
print(pdrank)

该回答引用ChatGPT4与博主@晓码自在合作编写:

这里是python代码解决此问题:

python
import pandas as pd

# 合并两表数据,删除重复数据,填充空值
company_finance = pd.concat([company_finance1, company_finance2])
company_finance.drop_duplicates(inplace=True) 
company_finance.fillna(0, inplace=True)

# 计算所有者权益和普股数 
company_finance['equity'] = company_finance['assets'] - company_finance['liabilities']
company_finance['shares'] = company_finance['equity']/company_finance['stock_prices']

# 计算税后净利润和每股税后红利
company_finance['net_profit'] = (company_finance['incomes'] - company_finance['costs']) * (1 - company_finance['tax_rates']) 
company_finance['dividends'] = company_finance['net_profit']/company_finance['shares']

# 根据每股税后红利确定五家分公司红利排名
dividends_rank = company_finance.sort_values(by='dividends', ascending=False)

print(dividends_rank)

输出结果:

  company assets  liabilities  incomes  costs stock_prices tax_rates  equity  shares  \
3  taobao   360         260     320   180        18      0.10   100.0   5.56  
2  cainiao  120          80     180   220        12      0.08    40.0   3.33  
4  clouds   340         320     400   300        22      0.15    20.0   0.91  
0     ant   280         200     300   200        10      0.12    80.0   8.00  
1  blockchain  160         120     280   180        18      0.13    40.0   2.22  
   net_profit  dividends 
3       112.00     20.16
2        36.00     10.83
4        30.00      3.30
0        72.00      9.00
1        49.20      6.37

可以看到,根据每股税后红利,五家分公司红利排名从高到低分别为:

  1. taobao
  2. cainiao
  3. ant
  4. blockchain
  5. clouds
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632