将不相等的数据框与所有值合并

时间:2019-04-09 04:47:51

标签: python pandas dataframe jupyter-notebook

在某些情况下,我想合并两个长度不相等的数据帧。数据帧的详细信息是:

  1. 数据框A包含大约1000行
  2. 数据框B包含大约50行

两个数据框中的字段类似 在A:

A_Name, A_count, A_Normalised value, A_year

数据框A:

print (df1)
   A_Organisation  A_count  A_Normalised  A_Year
0             ABC      654         34545    2018
1             DEF      565         54564    2018
2             GHI      565         34546    2018
3             QWE      790          3945    2018
4             DSO      788          1561    2017
5             DFB    34579           546    2017
6             HHS       56         31651    2017
7            FDGH       98           156    2016
8            DSFH    51651        153156    2016
9            KBIU      151          1561    2015
10            SDF      165          6513    2015

对于数据框B:

B_Name, B_count, B_Normalised value, B_year

print (df2)
  B_Organisation  B_count  B_Normalised  B_Year
0            MNO      123           432    2018
1            MNO      133           234    2018
2            MNO     8743           484    2017
3            MNO     1335          1512    2015
4            MNO      456          3454    2014
5            MNO      345           234    2014

现在,我想基于年份合并两个数据框,但是我不想重复值。 也就是说,假设在数据框A中,2018年包含50个值,在数据框B中,2018年包含5个值。然后,2018年的总行数应为50,并且输出应为:

enter image description here

1 个答案:

答案 0 :(得分:0)

GroupBy.cumcount用于计数器列,然后将DataFrame.mergerename列用于避免具有相同内容A_YearB_Year的列(如果使用了参数{{1} }和left_on中的right_on

merge

df1['g'] = df1.groupby('A_Year').cumcount()
df2['g'] = df2.groupby('B_Year').cumcount()

df = (df1.rename(columns={'A_Year':'Year'})
         .merge(df2.rename(columns={'B_Year':'Year'}), on=['Year','g'], how='outer')
         .drop('g', axis=1))