|
1 | 1 | import numpy as np |
2 | 2 | from numpy.random import randn |
3 | | -import pytest |
4 | | - |
5 | 3 | import pandas as pd |
6 | 4 | from pandas import DataFrame, Index, MultiIndex, Series |
7 | 5 | import pandas._testing as tm |
8 | 6 | from pandas.core.reshape.concat import concat |
9 | 7 | from pandas.core.reshape.merge import merge |
| 8 | +import pytest |
10 | 9 |
|
11 | 10 |
|
12 | 11 | @pytest.fixture |
@@ -482,6 +481,56 @@ def test_merge_datetime_index(self, klass): |
482 | 481 | result = df.merge(df, on=[df.index.year], how="inner") |
483 | 482 | tm.assert_frame_equal(result, expected) |
484 | 483 |
|
| 484 | + def test_merge_datetime_multi_index_empty_df(self): |
| 485 | + |
| 486 | + midx1 = pd.MultiIndex.from_tuples( |
| 487 | + [[pd.Timestamp("1950-01-01"), "A"], [pd.Timestamp("1950-01-02"), "B"]], |
| 488 | + names=["date", "panel"], |
| 489 | + ) |
| 490 | + left = DataFrame( |
| 491 | + data={ |
| 492 | + "data": [1.5, 1.5], |
| 493 | + }, |
| 494 | + index=midx1, |
| 495 | + ) |
| 496 | + |
| 497 | + midx2 = pd.MultiIndex.from_tuples([], names=["date", "panel"]) |
| 498 | + |
| 499 | + right = DataFrame(index=midx2, columns=["state"]) |
| 500 | + |
| 501 | + midx3 = pd.MultiIndex.from_tuples( |
| 502 | + [[pd.Timestamp("1950-01-01"), "A"], [pd.Timestamp("1950-01-02"), "B"]], |
| 503 | + names=["date", "panel"], |
| 504 | + ) |
| 505 | + |
| 506 | + expected_left_merge = DataFrame( |
| 507 | + data={ |
| 508 | + "data": [1.5, 1.5], |
| 509 | + "state": [None, None], |
| 510 | + }, |
| 511 | + index=midx3, |
| 512 | + ) |
| 513 | + |
| 514 | + expected_right_merge = DataFrame( |
| 515 | + data={ |
| 516 | + "state": [None, None], |
| 517 | + "data": [1.5, 1.5], |
| 518 | + }, |
| 519 | + index=midx3, |
| 520 | + ) |
| 521 | + |
| 522 | + result_left_merge = left.merge(right, how="left", on=["date", "panel"]) |
| 523 | + tm.assert_frame_equal(result_left_merge, expected_left_merge) |
| 524 | + |
| 525 | + result_right_merge = right.merge(left, how="right", on=["date", "panel"]) |
| 526 | + tm.assert_frame_equal(result_right_merge, expected_right_merge) |
| 527 | + |
| 528 | + result_left_join = left.join(right, how="left") |
| 529 | + tm.assert_frame_equal(result_left_join, expected_left_merge) |
| 530 | + |
| 531 | + result_right_join = right.join(left, how="right") |
| 532 | + tm.assert_frame_equal(result_right_join, expected_right_merge) |
| 533 | + |
485 | 534 | def test_join_multi_levels(self): |
486 | 535 |
|
487 | 536 | # GH 3662 |
@@ -837,36 +886,3 @@ def test_join_multi_wrong_order(self): |
837 | 886 | ) |
838 | 887 |
|
839 | 888 | tm.assert_frame_equal(result, expected) |
840 | | - |
841 | | - |
842 | | -def test_merge_datetime_index_empty_df(): |
843 | | - |
844 | | - midx1 = pd.MultiIndex.from_tuples( |
845 | | - [[pd.Timestamp("1950-01-01"), "A"], [pd.Timestamp("1950-01-02"), "B"]], |
846 | | - names=["date", "panel"], |
847 | | - ) |
848 | | - frame = DataFrame( |
849 | | - data={ |
850 | | - "data": [1.5, 1.5], |
851 | | - }, |
852 | | - index=midx1, |
853 | | - ) |
854 | | - |
855 | | - midx2 = pd.MultiIndex.from_tuples([], names=["date", "panel"]) |
856 | | - |
857 | | - other = DataFrame(index=midx2, columns=["state"]) |
858 | | - |
859 | | - midx3 = pd.MultiIndex.from_tuples( |
860 | | - [[pd.Timestamp("1950-01-01"), "A"], [pd.Timestamp("1950-01-02"), "B"]], |
861 | | - names=["date", "panel"], |
862 | | - ) |
863 | | - |
864 | | - expected = DataFrame( |
865 | | - data={ |
866 | | - "data": [1.5, 1.5], |
867 | | - "state": [None, None], |
868 | | - }, |
869 | | - index=midx3, |
870 | | - ) |
871 | | - result = frame.merge(other, how="left", on=["date", "panel"]) |
872 | | - tm.assert_frame_equal(result, expected) |
|
0 commit comments