gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:17 25 4
gpt4 key购买 nike

我想在某些条件下合并两个长度不等的数据帧。数据框的详细信息是:

  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

最佳答案

使用 GroupBy.cumcount 作为计数器列,然后将 DataFrame.mergerename 列一起使用,以避免具有相同内容 A_YearB_Year 的列(如果使用参数) 合并中的left_onright_on:

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))
<小时/>
print (df)
A_Organisation A_count A_Normalised Year B_Organisation B_count \
0 ABC 654.0 34545.0 2018 MNO 123.0
1 DEF 565.0 54564.0 2018 MNO 133.0
2 GHI 565.0 34546.0 2018 NaN NaN
3 QWE 790.0 3945.0 2018 NaN NaN
4 DSO 788.0 1561.0 2017 MNO 8743.0
5 DFB 34579.0 546.0 2017 NaN NaN
6 HHS 56.0 31651.0 2017 NaN NaN
7 FDGH 98.0 156.0 2016 NaN NaN
8 DSFH 51651.0 153156.0 2016 NaN NaN
9 KBIU 151.0 1561.0 2015 MNO 1335.0
10 SDF 165.0 6513.0 2015 NaN NaN
11 NaN NaN NaN 2014 MNO 456.0
12 NaN NaN NaN 2014 MNO 345.0

B_Normalised
0 432.0
1 234.0
2 NaN
3 NaN
4 484.0
5 NaN
6 NaN
7 NaN
8 NaN
9 1512.0
10 NaN
11 3454.0
12 234.0

关于python - 将不相等的数据框与所有值合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55585273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com