|
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