pandas - 在数据框1的第1列和数据框2的第2列的基础上填充数据框1的第3列
问题描述
我有 2 个数据框 df1 和 df2。没有任何唯一值,并且它们的行数不同。df1:
| code_IATA | code_ICAO | Time_Zone |
| ASGE | BSF | Pacific |
| BEMDF | NHU | America/New_york |
| JKL | STF | America/New_york |
df2:
| code_IATA | code_ICAO | Time_Zone |
| ASGE | BSF | NAN |
| BEMDF | NHU | NAN |
| POW | UFT | NAN |
| SHMS | LNQ | NAN |
我想将 df1 的 Time_Zone 的值复制到 df2 的 Time_Zone 中,其中两列的 code_IATA 值都匹配。我尝试了 map, contains 并尝试使用 for 循环解决,但无法做到。
df2['Time_Zone '] = df2['code_IATA'].map(df1.set_index('code_IATA')['Time_Zone'])
我无法删除重复值,因为所有值对我都很重要,并且 df1 包含比 df2 更多的行。两个数据帧中的行数不相等。
希望,我解释得很好。
解决方案
new_df=df1.merge(df2,on='code_IATA',how='right').reindex(columns=['code_IATA','code_ICAO_y','Time_Zone_x'])
new_df.columns=df1.columns
print(new_df)
code_IATA code_ICAO Time_Zone
0 ASGE BSF Pacific
1 BEMDF NHU America/New_york
2 POW UFT NaN
3 SHMS LNQ NaN
或使用:on=['code_IATA','code_ICAO']
df1.merge(df2,how='right',on=['code_IATA','code_ICAO']).drop('Time_Zone_y',axis=1)
推荐阅读
- php - 输入提交按钮的可见性设置
- c# - 实现 Equals 以使引用相等或基于键的相等?
- macos - 无法从 Mac 将程序上传到 Arduino Leonardo
- python - 如何让变量在 tkinter 中实际显示?
- python - Python替换单引号,撇号除外
- binary - 如何将所有二进制文件打包在 bazel 中?
- http-headers - HTTP::Server::Response#headers 的 `[]=` 和 `add` 有什么区别?
- android - FirebaseRecyclerAdapter 无法将第一个布局识别为位置
- java - 如何在 javafx 中创建这种类型的按钮
- react-native - React-native firebase 错误:无法确定应用程序的包标识符