[英]Merging two dataframes together
我想将两个数据帧合并在一起。 第一个数据帧是通过将三个数据帧添加在一起来创建的。 这些数据框包含不同公司的相同数据。
df_ipos_401 = pd.read_csv("C:/Users/niklas/Documents/BA/Daten/Daten-Regression/401_IPO_data_maximal_csv.csv", header = 0, usecols=['CUSIP9From6_norm','Issuer', 'IssueDate', 'MainSICCode'])
df_ipos_401.columns= (['Issuer','FilingDate', 'SIC-Code', 'Cusip'])
df_ipos_402 = pd.read_csv("C:/Users/niklas/Documents/BA/Daten/Daten-Regression/402_IPO_data_maximal_EDGAR_match.csv", header = 0, usecols=['CUSIP9From6_norm','Issuer', 'IssueDate', 'MainSICCode'])
df_ipos_402.columns= (['Issuer','FilingDate', 'SIC-Code', 'Cusip'])
df_ipos_100 = pd.read_csv("C:/Users/niklas/Documents/BA/Daten/Daten-Regression/100_IPO_data_merged_by_DealNumber_without_any_exclusion.csv", header = 0, usecols=['CUSIP9From6_norm','Issuer', 'IssueDate', 'MainSICCode'])
df_ipos_100.columns= (['Issuer','FilingDate', 'SIC-Code', 'Cusip'])
result_ipos = pd.concat([df_ipos_401,df_ipos_402,df_ipos_100])
df_prep_ipo = result_ipos.drop_duplicates()
这是输出:
Issuer FilingDate SIC-Code Cusip9
0 Sea Pines Co 1973-01-09 7011 811414101
1 Teltronics Services 1973-01-09 1711 879699106
2 Syracuse China Corp 1973-01-11 3262 871668109
3 Universal Security Instruments 1973-01-16 3669 913821104
4 WD-40 Co 1973-01-16 2899 929236107
现在,对于这个新数据框,我想填充提交数据年份的资产负债表数字。 包含财务数据的另一个数据框 (df_fund) 如下所示:
Year Cusip9 Name Total Assets Debt Sales Income LogSales Leverage Asset Turnover Margin Revenue Growth
0 2010.0 000361105 AAR CORP 17037270.0 3298020.0 731390.0 17757820.0 13.502702 0.193577 0.042929 24.279550 NaN
1 2011.0 000361105 AAR CORP 21956530.0 6694890.0 677230.0 20744980.0 13.425766 0.304916 0.030844 30.632104 -0.074051
2 2012.0 000361105 AAR CORP 21369000.0 6222000.0 550000.0 21671000.0 13.217674 0.291169 0.025738 39.401818 -0.187868
3 2013.0 000361105 AAR CORP 21995000.0 5643000.0 729000.0 20350000.0 13.499429 0.256558 0.033144 27.914952 0.325455
4 2014.0 000361105 AAR CORP 15150000.0 850000.0 -545000.0 15943000.0 NaN 0.056106 -0.035974 -29.253211 -1.747599
我试过的代码是这样的:
df_prep_ipo['IPO Year'] = pd.DatetimeIndex(df_prep_ipo['Year']).year
df_ipos = df_prep_ipo.merge(df_fund, left_on=['Cusip9', 'IPO Year'], right_on=['Cusip9', 'Year'])
del df_ipos['Name']
del df_ipos['Year']
该代码适用于单个数据帧,但在我将 3 个数据帧添加到一个后,它不再起作用。 我收到的是以下错误消息: KeyError: 'Year'
我假设对于某些公司,我没有其各自 IPO 年度的财务数据。 所以我想放弃这些公司是最有意义的。 有谁知道我该如何解决?
我相信错误的发生是因为df_prep_ipo
和df_fund
没有列Year 。 所以,我们需要先提取一年的FilingDate df_prep_ipo
和改变的列名df_fund
从年初IPO新年。 此外,最好将 df_fund year 更改为 int。
在合并之前尝试下面的代码。
df_prep_ipo['IPO Year'] = pd.DatetimeIndex(df_prep_ipo['FilingDate']).year
df_fund = df_fund.rename(columns={'Year': 'IPO Year'})
df_fund['IPO Year'] = df_fund['IPO Year'].astype(int)
如果要删除缺少 Year 数据的行,请在运行上述部分之前使用以下代码预处理数据。
df_prep_ipo = df_prep_ipo.dropna(subset=['FilingDate'])
df_fund = df_fund.dronpa(subset=['Year'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.