excel - 在有时存在数据的 3 列上合并 2 个数据框
问题描述
我正在尝试从另一个数据框中合并并填充一个数据框中的缺失值。希望这不是一个太长的解释,我只是在这个问题上绞尽脑汁太久了。我正在处理 2 个巨大的 CSV 文件,所以我在这里做了一个小例子。我在最后包含了整个代码,以防您想提供帮助。非常感谢您。开始了!
print(df1)
A B C D E
0 1 B1 D1 E1
1 C1 D1 E1
2 1 B1 D1 E1
3 2 B2 D2 E2
4 B2 C2 D2 E2
5 3 D3 E3
6 3 B3 C3 D3 E3
7 4 C4 D4 E4
print(df2)
A B C F G
0 1 C1 F1 G1
1 B2 C2 F2 G2
2 3 B3 F3 G3
3 4 B4 C4 F4 G4
我基本上想通过 3 个不同的列将 df2 合并到 df1 中。我知道您可以合并多个列名,但它似乎没有给我想要的结果。我想保留 df1 中的所有数据,并填写 df2 中的数据,所以我使用 how='left'。
我对 python 还很陌生,已经做了很多研究,但遇到了瓶颈。这是我尝试过的。
data3 = df1.merge(df2, how='left', on=['A'])
print(data3)
A B_x C_x D E B_y C_y F G
0 1 B1 D1 E1 C1 F1 G1
1 C1 D1 E1 B2 C2 F2 G2
2 1 B1 D1 E1 C1 F1 G1
3 2 B2 D2 E2 NaN NaN NaN NaN
4 B2 C2 D2 E2 B2 C2 F2 G2
5 3 D3 E3 B3 F3 G3
6 3 B3 C3 D3 E3 B3 F3 G3
7 4 C4 D4 E4 B4 C4 F4 G4
正如您在此处看到的,它只适用于 A,但是因为这是一个带有空白值的 csv 文件。空白值似乎合并在一起。我不想要。因为 df2 在第 2 行是空白的,所以它填写了它看到空白的数据,这不是我想要的。如果找不到匹配项,它应该是 NaN。
每当我开始在我的 "on=['A', 'B'] 中添加其他行时,它并没有做任何不同的事情。事实上,A 不再合并。
data3 = df1.merge(df2, how='left', on=['A', 'B'])
print(data3)
A B C_x D E C_y F G
0 1 B1 D1 E1 NaN NaN NaN
1 C1 D1 E1 NaN NaN NaN
2 1 B1 D1 E1 NaN NaN NaN
3 2 B2 D2 E2 NaN NaN NaN
4 B2 C2 D2 E2 C2 F2 G2
5 3 D3 E3 NaN NaN NaN
6 3 B3 C3 D3 E3 F3 G3
7 4 C4 D4 E4 NaN NaN NaN
A、B 和 C 行是我想要关联和合并的值。使用这两个数据框,它应该知道足以填补所有空白。我的结尾 df 应该是这样的:
print(desired_output):
A B C D E F G
0 1 B1 C1 D1 E1 F1 G1
1 1 B1 C1 D1 E1 F1 G1
2 1 B1 C1 D1 E1 F1 G1
3 2 B2 C2 D2 E2 F2 G2
4 2 B2 C2 D2 E2 F2 G2
5 3 B3 C3 D3 E3 F3 G3
6 3 B3 C3 D3 E3 F3 G3
7 4 B4 C4 D4 E4 F4 G4
即使 A、B 和 C 有重复的行,我也想保留所有数据,只需在可能适合的地方填写 df2 中的数据,即使它是重复数据。我也不想让所有的 _x 和 _y 后缀合并。我知道如何重命名,但是进行 3 次不同的合并并合并这些合并开始变得非常复杂,非常快,重复的行和后缀...
长话短说,我如何将两个数据帧按 A、B、C 合并?它发生的顺序无关紧要。
这是实际数据的示例。我有自己的数据,其中包含其他数据,我通过某些标识符将其与这些数据相关联。基本上是通过 MMSI、名称和 IMO。我想保留重复,因为它们实际上并不是重复的,只是每艘船的附加数据点
MMSI BaseDateTime LAT LON VesselName IMO CallSign
366940480.0 2017-01-04T11:39:36 52.48730 -174.02316 EARLY DAWN 7821130 WDB7319
366940480.0 2017-01-04T13:51:07 52.41575 -174.60041 EARLY DAWN 7821130 WDB7319
273898000.0 2017-01-06T16:55:33 63.83668 -174.41172 MYS CHUPROVA NaN UAEZ
352844000.0 2017-01-31T22:51:31 51.89778 -176.59334 JACHA 8512920 3EFC4
352844000.0 2017-01-31T23:06:31 51.89795 -176.59333 JACHA 8512920 3EFC4
解决方案
推荐阅读
- android - 使用 espresso 测试图像不起作用
- swift - 从超类访问子类函数
- c++ - #include 上的 Code::Blocks (MinGW) 编译错误
- android - 为什么 React native 给出错误“adb”不被识别为内部或外部命令?
- json - 我可以在 SQL Server 中修改多对象 JSON 数组中的所有值吗?
- wso2esb - Datamapper 中的外部值使用 - WSO2 ESB
- jquery - 如何通过jquery将单选按钮的值与类合并
- vue.js - Vue.js - 使用图像字段搜索排序表
- c# - 转换列表
到 C# 中的 DataTable 列 - scala - 异常泄漏问题