合并两个数据框

时间:2020-08-28 14:29:46

标签: python pandas dataframe

我想合并两个数据框。通过将三个数据帧加在一起来创建第一个数据帧。这些数据框包含不同公司的相同数据。

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年的财务数据。因此,我认为放弃这些公司将是最有意义的。有谁知道我该如何解决?

1 个答案:

答案 0 :(得分:0)

我认为发生错误是因为df_prep_ipodf_fund没有 Year (年份)列。因此,我们需要首先从df_prep_ipo的提交日期中提取年份,并将df_fund的列名从 Year 更改为 IPO Year 。另外,最好将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'])