|
2 | 2 | import pytest
|
3 | 3 |
|
4 | 4 | import pandas as pd
|
5 |
| -from pandas import DataFrame, Index, MultiIndex, Series |
| 5 | +from pandas import DataFrame, Index, MultiIndex, Series, Timestamp |
6 | 6 | import pandas._testing as tm
|
7 | 7 | from pandas.core.reshape.concat import concat
|
8 | 8 | from pandas.core.reshape.merge import merge
|
@@ -481,6 +481,53 @@ def test_merge_datetime_index(self, klass):
|
481 | 481 | result = df.merge(df, on=[df.index.year], how="inner")
|
482 | 482 | tm.assert_frame_equal(result, expected)
|
483 | 483 |
|
| 484 | + @pytest.mark.parametrize("merge_type", ["left", "right"]) |
| 485 | + def test_merge_datetime_multi_index_empty_df(self, merge_type): |
| 486 | + # see gh-36895 |
| 487 | + |
| 488 | + left = DataFrame( |
| 489 | + data={ |
| 490 | + "data": [1.5, 1.5], |
| 491 | + }, |
| 492 | + index=MultiIndex.from_tuples( |
| 493 | + [[Timestamp("1950-01-01"), "A"], [Timestamp("1950-01-02"), "B"]], |
| 494 | + names=["date", "panel"], |
| 495 | + ), |
| 496 | + ) |
| 497 | + |
| 498 | + right = DataFrame( |
| 499 | + index=MultiIndex.from_tuples([], names=["date", "panel"]), columns=["state"] |
| 500 | + ) |
| 501 | + |
| 502 | + expected_index = MultiIndex.from_tuples( |
| 503 | + [[Timestamp("1950-01-01"), "A"], [Timestamp("1950-01-02"), "B"]], |
| 504 | + names=["date", "panel"], |
| 505 | + ) |
| 506 | + |
| 507 | + if merge_type == "left": |
| 508 | + expected = DataFrame( |
| 509 | + data={ |
| 510 | + "data": [1.5, 1.5], |
| 511 | + "state": [None, None], |
| 512 | + }, |
| 513 | + index=expected_index, |
| 514 | + ) |
| 515 | + results_merge = left.merge(right, how="left", on=["date", "panel"]) |
| 516 | + results_join = left.join(right, how="left") |
| 517 | + else: |
| 518 | + expected = DataFrame( |
| 519 | + data={ |
| 520 | + "state": [None, None], |
| 521 | + "data": [1.5, 1.5], |
| 522 | + }, |
| 523 | + index=expected_index, |
| 524 | + ) |
| 525 | + results_merge = right.merge(left, how="right", on=["date", "panel"]) |
| 526 | + results_join = right.join(left, how="right") |
| 527 | + |
| 528 | + tm.assert_frame_equal(results_merge, expected) |
| 529 | + tm.assert_frame_equal(results_join, expected) |
| 530 | + |
484 | 531 | def test_join_multi_levels(self):
|
485 | 532 |
|
486 | 533 | # GH 3662
|
|
0 commit comments