繁体   English   中英

将两个数据帧合并在一起

[英]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_ipodf_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM