为了合并基于 year
和 city
的两个数据框,我想填充 df1 gdp_value
中缺失的值code> 和 growth_rate
分别来自 df2 的 gdp
和 rate
值。
df1
year city gdp_value growth_rate
0 2015 sh NaN NaN
1 2016 sh NaN NaN
2 2017 sh NaN NaN
3 2018 sh NaN NaN
4 2019 sh NaN NaN
5 2015 bj 7.0 0.01
6 2016 bj 3.0 0.03
7 2017 bj 2.0 -0.03
8 2018 bj 5.0 0.05
9 2019 bj 4.0 0.02
df2
year city gdp rate
0 2015 sh 6 0.04
1 2016 sh 5 0.07
2 2017 sh 3 -0.03
3 2018 sh 6 0.05
4 2019 sh 4 0.02
我尝试过 pd.merge(df1, df2, on=['year', 'city'], how = 'left')
,我得到了:
year city gdp_value growth_rate gdp rate
0 2015 sh NaN NaN 6.0 0.04
1 2016 sh NaN NaN 5.0 0.07
2 2017 sh NaN NaN 3.0 -0.03
3 2018 sh NaN NaN 6.0 0.05
4 2019 sh NaN NaN 4.0 0.02
5 2015 bj 7.0 0.01 NaN NaN
6 2016 bj 3.0 0.03 NaN NaN
7 2017 bj 2.0 -0.03 NaN NaN
8 2018 bj 5.0 0.05 NaN NaN
9 2019 bj 4.0 0.02 NaN NaN
我想要的输出df是这样的:
year city gdp_value ratio_rate
0 2015 sh 6 0.04
1 2016 sh 5 0.07
2 2017 sh 3 -0.03
3 2018 sh 6 0.05
4 2019 sh 4 0.02
5 2015 bj 7 0.01
6 2016 bj 3 0.03
7 2017 bj 2 -0.03
8 2018 bj 5 0.05
9 2019 bj 4 0.02
感谢您的帮助。
已编辑,这个解决方案似乎可行,谢谢:
df1 = df1.set_index(['year', 'city'])
df1.update(
df2
.set_index(['year', 'city'])\
.rename(columns={'gdp':'gdp_value','rate':'growth_rate'})\
)
df1 = df1.reset_index()
最佳答案
正如问题中提到的,您还可以根据您的数据和需求使用更新:
df1 = df1.set_index(['year', 'city'])
df1.update(
df2
.set_index(['year', 'city'])\
.rename(columns={'gdp':'gdp_value','rate':'growth_rate'})\
)
df1 = df1.reset_index()
一种方法是将 combine_first
与 set_index
和列重命名结合使用:
df1.set_index(['year','city'])\
.combine_first(df2.set_index(['year','city'])
.rename(columns={'gdp':'gdp_value','rate':'growth_rate'}))\
.reset_index()
输出:
year city gdp_value growth_rate
0 2015 bj 7.0 0.01
1 2015 sh 6.0 0.04
2 2016 bj 3.0 0.03
3 2016 sh 5.0 0.07
4 2017 bj 2.0 -0.03
5 2017 sh 3.0 -0.03
6 2018 bj 5.0 0.05
7 2018 sh 6.0 0.05
8 2019 bj 4.0 0.02
9 2019 sh 4.0 0.02
关于python - 基于 Python 中另一个数据帧的多列合并和填充缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58636416/