在某些情况下,我想合并两个长度不相等的数据帧。数据帧的详细信息是:
两个数据框中的字段类似 在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,并且输出应为:
答案 0 :(得分:0)
将GroupBy.cumcount
用于计数器列,然后将DataFrame.merge
与rename
列用于避免具有相同内容A_Year
和B_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))