PageRenderTime 59ms CodeModel.GetById 33ms RepoModel.GetById 1ms app.codeStats 0ms

/pandas/tests/reshape/test_merge_ordered.py

https://github.com/neurodebian/pandas
Python | 90 lines | 65 code | 23 blank | 2 comment | 2 complexity | dc50cc1ffbaa12204bacd1c8100eedfe MD5 | raw file
  1. import pandas as pd
  2. from pandas import DataFrame, merge_ordered
  3. from pandas.util import testing as tm
  4. from pandas.util.testing import assert_frame_equal
  5. from numpy import nan
  6. class TestOrderedMerge(object):
  7. def setup_method(self, method):
  8. self.left = DataFrame({'key': ['a', 'c', 'e'],
  9. 'lvalue': [1, 2., 3]})
  10. self.right = DataFrame({'key': ['b', 'c', 'd', 'f'],
  11. 'rvalue': [1, 2, 3., 4]})
  12. def test_deprecation(self):
  13. with tm.assert_produces_warning(FutureWarning):
  14. pd.ordered_merge(self.left, self.right, on='key')
  15. # GH #813
  16. def test_basic(self):
  17. result = merge_ordered(self.left, self.right, on='key')
  18. expected = DataFrame({'key': ['a', 'b', 'c', 'd', 'e', 'f'],
  19. 'lvalue': [1, nan, 2, nan, 3, nan],
  20. 'rvalue': [nan, 1, 2, 3, nan, 4]})
  21. assert_frame_equal(result, expected)
  22. def test_ffill(self):
  23. result = merge_ordered(
  24. self.left, self.right, on='key', fill_method='ffill')
  25. expected = DataFrame({'key': ['a', 'b', 'c', 'd', 'e', 'f'],
  26. 'lvalue': [1., 1, 2, 2, 3, 3.],
  27. 'rvalue': [nan, 1, 2, 3, 3, 4]})
  28. assert_frame_equal(result, expected)
  29. def test_multigroup(self):
  30. left = pd.concat([self.left, self.left], ignore_index=True)
  31. left['group'] = ['a'] * 3 + ['b'] * 3
  32. result = merge_ordered(left, self.right, on='key', left_by='group',
  33. fill_method='ffill')
  34. expected = DataFrame({'key': ['a', 'b', 'c', 'd', 'e', 'f'] * 2,
  35. 'lvalue': [1., 1, 2, 2, 3, 3.] * 2,
  36. 'rvalue': [nan, 1, 2, 3, 3, 4] * 2})
  37. expected['group'] = ['a'] * 6 + ['b'] * 6
  38. assert_frame_equal(result, expected.loc[:, result.columns])
  39. result2 = merge_ordered(self.right, left, on='key', right_by='group',
  40. fill_method='ffill')
  41. assert_frame_equal(result, result2.loc[:, result.columns])
  42. result = merge_ordered(left, self.right, on='key', left_by='group')
  43. assert result['group'].notna().all()
  44. def test_merge_type(self):
  45. class NotADataFrame(DataFrame):
  46. @property
  47. def _constructor(self):
  48. return NotADataFrame
  49. nad = NotADataFrame(self.left)
  50. result = nad.merge(self.right, on='key')
  51. assert isinstance(result, NotADataFrame)
  52. def test_empty_sequence_concat(self):
  53. # GH 9157
  54. empty_pat = "[Nn]o objects"
  55. none_pat = "objects.*None"
  56. test_cases = [
  57. ((), empty_pat),
  58. ([], empty_pat),
  59. ({}, empty_pat),
  60. ([None], none_pat),
  61. ([None, None], none_pat)
  62. ]
  63. for df_seq, pattern in test_cases:
  64. tm.assert_raises_regex(ValueError, pattern, pd.concat, df_seq)
  65. pd.concat([pd.DataFrame()])
  66. pd.concat([None, pd.DataFrame()])
  67. pd.concat([pd.DataFrame(), None])