python - 在多列上合并 2 个 pandas 数据框
问题描述
我有 2 个数据框,其中一个包含前几个月的预测值和实际值。如下图所示,它有 1 月和 2 月的预测。2 月的值为 Null。
DF1
日期 | 钥匙 | 价值 | 预言 |
---|---|---|---|
1-1-21 | 一个 | 33211 | 22123 |
1-1-21 | 文学学士 | 43231 | 32132 |
1-1-21 | C | 13431 | 43432 |
1-2-21 | 一个 | 楠 | 23421 |
1-2-21 | 文学学士 | 楠 | 44443 |
1-2-21 | C | 楠 | 32133 |
第二个数据框包含 2 月的日期、键和值。我想将它们合并以形成一个新表,其中包含所有实际值和一个表中的预测
DF2
日期 | 钥匙 | 价值 |
---|---|---|
1-2-21 | 一个 | 33212 |
1-2-21 | 文学学士 | 52121 |
1-2-21 | C | 23123 |
我想将键和日期上的值合并到第一个表中。最终应该是这样的
日期 | 钥匙 | 价值 | 预言 |
---|---|---|---|
1-1-21 | 一个 | 33211 | 22123 |
1-1-21 | 文学学士 | 43231 | 32132 |
1-1-21 | C | 13431 | 43432 |
1-2-21 | 一个 | 33212 | 23421 |
1-2-21 | 文学学士 | 52121 | 44443 |
1-2-21 | C | 23123 | 32133 |
我试过pd.merge
它创建一个新列而不是连接到一个列中,pd.join
但是它进行了左连接并删除了一些预测数据。combine first 只是简单地附加到数据
解决方案
这可能是一种在一条(尽管很长)行中执行此操作的方法:
df1['Value'] = df1.apply(lambda row: row['Value'] if pd.notna(row['Value']) else df2[(df2['Date'] == row['Date']) & (df2['Key'] == row['Key'])].iloc[0]['Value'], axis=1)
推荐阅读
- azure - 如何将 Azure 搜索服务与异构数据源结合使用
- spotfire - 有没有办法在 Tibco Spotfire 的自定义表达式中自动更新字段名称?
- python-3.x - 如何在 python-vlc 中播放 youtube 视频?
- angular - RxJs如何创建可观察的流并在延迟后仅订阅最后一个
- unreal-engine4 - 我的弹丸在使用虚幻引擎 4 的多人游戏中无法很好地复制
- angular - 如何在打字稿中动态构建返回语句?
- python - 无法在 crontab 中运行具有 selenium 库的 python 脚本
- reactjs - 在应用程序中反应 setstatus 问题
- r - httr POST 请求错误:上游连接错误或在标头之前断开/重置。重置原因:连接终止
- asp.net-core - 剃须刀页面如何显示图片?