|
13 | 13 | # limitations under the License. |
14 | 14 |
|
15 | 15 | from datetime import datetime |
| 16 | +import re |
16 | 17 | import typing |
17 | 18 |
|
18 | 19 | import pandas as pd |
@@ -343,7 +344,7 @@ def test_merge_left_on_right_on(scalars_dfs, merge_how): |
343 | 344 | assert_pandas_df_equal(bf_result, pd_result, ignore_order=True) |
344 | 345 |
|
345 | 346 |
|
346 | | -def test_pd_merge_cross(scalars_dfs): |
| 347 | +def test_merge_cross(scalars_dfs): |
347 | 348 | scalars_df, scalars_pandas_df = scalars_dfs |
348 | 349 | left_columns = ["int64_col", "float64_col", "int64_too"] |
349 | 350 | right_columns = ["int64_col", "bool_col", "string_col", "rowindex_2"] |
@@ -398,6 +399,61 @@ def test_merge_series(scalars_dfs, merge_how): |
398 | 399 | assert_pandas_df_equal(bf_result, pd_result, ignore_order=True) |
399 | 400 |
|
400 | 401 |
|
| 402 | +def test_merge_w_common_columns(scalars_dfs): |
| 403 | + scalars_df, scalars_pandas_df = scalars_dfs |
| 404 | + left_columns = ["int64_col", "int64_too"] |
| 405 | + right_columns = ["int64_col", "bool_col"] |
| 406 | + |
| 407 | + df = bpd.merge( |
| 408 | + scalars_df[left_columns], scalars_df[right_columns], "inner", sort=True |
| 409 | + ) |
| 410 | + |
| 411 | + pd_result = pd.merge( |
| 412 | + scalars_pandas_df[left_columns], |
| 413 | + scalars_pandas_df[right_columns], |
| 414 | + "inner", |
| 415 | + sort=True, |
| 416 | + ) |
| 417 | + assert_pandas_df_equal(df.to_pandas(), pd_result, ignore_order=True) |
| 418 | + |
| 419 | + |
| 420 | +def test_merge_raises_error_when_no_common_columns(scalars_dfs): |
| 421 | + scalars_df, _ = scalars_dfs |
| 422 | + left_columns = ["float64_col", "int64_too"] |
| 423 | + right_columns = ["int64_col", "bool_col"] |
| 424 | + |
| 425 | + left = scalars_df[left_columns] |
| 426 | + right = scalars_df[right_columns] |
| 427 | + |
| 428 | + with pytest.raises( |
| 429 | + ValueError, |
| 430 | + match="No common columns to perform merge on.", |
| 431 | + ): |
| 432 | + bpd.merge(left, right, "inner") |
| 433 | + |
| 434 | + |
| 435 | +def test_merge_raises_error_when_left_right_on_set(scalars_dfs): |
| 436 | + scalars_df, _ = scalars_dfs |
| 437 | + left_columns = ["int64_col", "int64_too"] |
| 438 | + right_columns = ["int64_col", "bool_col"] |
| 439 | + |
| 440 | + left = scalars_df[left_columns] |
| 441 | + right = scalars_df[right_columns] |
| 442 | + |
| 443 | + with pytest.raises( |
| 444 | + ValueError, |
| 445 | + match=re.escape("Can not pass both `on` and `left_on` + `right_on` params."), |
| 446 | + ): |
| 447 | + bpd.merge( |
| 448 | + left, |
| 449 | + right, |
| 450 | + "inner", |
| 451 | + left_on="int64_too", |
| 452 | + right_on="int64_col", |
| 453 | + on="int64_col", |
| 454 | + ) |
| 455 | + |
| 456 | + |
401 | 457 | def _convert_pandas_category(pd_s: pd.Series): |
402 | 458 | """ |
403 | 459 | Transforms a pandas Series with Categorical dtype into a bigframes-compatible |
|
0 commit comments