Mat*_*rna 5 python merge pandas
从这个问题出发,我试图匹配两个 Pandas 数据帧。
匹配条件为:
(left['to_match'] == right['first']) | (left['to_match'] == right['second'])
Run Code Online (Sandbox Code Playgroud)
或者,换句话说,左侧数据帧中要匹配的列应等于右侧数据帧中的第一列或第二列 - 因此是 OR 条件。
我可以使用和输入列表来解决问题,pd.merge例如
left.merge(right, left_on=['to_match', 'to_match'], right_on=['first', 'second'])
Run Code Online (Sandbox Code Playgroud)
但反过来,当两列匹配时,这只会给我 AND 条件结果。也就是说, 中的两列right具有相同的值。
这是输入数据的示例
左边
to_match
0 TCNU4843483
1 MA18219
2 MA81192
3 MFREIGHT
Run Code Online (Sandbox Code Playgroud)
正确的
first second
0 ASDREF TCNU4843483
1 MA18219 Null
2 Null Null
3 HROB789 NESU6748392
Run Code Online (Sandbox Code Playgroud)
和这个预期的输出
to_match first second
0 TCNU4843483 ASDREF TCNU4843483
1 MA18219 MA18219 Null
2 MA81192 Null Null
3 MFREIGHT Null Null
4 Null HROB789 NESU6748392
Run Code Online (Sandbox Code Playgroud)
知道 Pandas 是否支持这个,或者我必须编写自己的函数吗?
Rei*_*ldN -1
没有 SQL 并不是完成这项工作的最佳工具。SQL 很适合提取数据,就这样!
我相信您的 OR 条件不起作用,因为您正在使用 () 关闭操作
尝试:
(left['to_match'] == right['first'] | left['to_match'] == right['second'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
486 次 |
| 最近记录: |