test_index_as_string.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import numpy as np
  2. import pytest
  3. import pandas as pd
  4. from pandas.util.testing import assert_frame_equal, assert_series_equal
  5. @pytest.fixture(params=[['inner'], ['inner', 'outer']])
  6. def frame(request):
  7. levels = request.param
  8. df = pd.DataFrame({'outer': ['a', 'a', 'a', 'b', 'b', 'b'],
  9. 'inner': [1, 2, 3, 1, 2, 3],
  10. 'A': np.arange(6),
  11. 'B': ['one', 'one', 'two', 'two', 'one', 'one']})
  12. if levels:
  13. df = df.set_index(levels)
  14. return df
  15. @pytest.fixture()
  16. def series():
  17. df = pd.DataFrame({'outer': ['a', 'a', 'a', 'b', 'b', 'b'],
  18. 'inner': [1, 2, 3, 1, 2, 3],
  19. 'A': np.arange(6),
  20. 'B': ['one', 'one', 'two', 'two', 'one', 'one']})
  21. s = df.set_index(['outer', 'inner', 'B'])['A']
  22. return s
  23. @pytest.mark.parametrize('key_strs,groupers', [
  24. ('inner', # Index name
  25. pd.Grouper(level='inner')
  26. ),
  27. (['inner'], # List of index name
  28. [pd.Grouper(level='inner')]
  29. ),
  30. (['B', 'inner'], # Column and index
  31. ['B', pd.Grouper(level='inner')]
  32. ),
  33. (['inner', 'B'], # Index and column
  34. [pd.Grouper(level='inner'), 'B'])])
  35. def test_grouper_index_level_as_string(frame, key_strs, groupers):
  36. result = frame.groupby(key_strs).mean()
  37. expected = frame.groupby(groupers).mean()
  38. assert_frame_equal(result, expected)
  39. @pytest.mark.parametrize('levels', [
  40. 'inner', 'outer', 'B',
  41. ['inner'], ['outer'], ['B'],
  42. ['inner', 'outer'], ['outer', 'inner'],
  43. ['inner', 'outer', 'B'], ['B', 'outer', 'inner']
  44. ])
  45. def test_grouper_index_level_as_string_series(series, levels):
  46. # Compute expected result
  47. if isinstance(levels, list):
  48. groupers = [pd.Grouper(level=lv) for lv in levels]
  49. else:
  50. groupers = pd.Grouper(level=levels)
  51. expected = series.groupby(groupers).mean()
  52. # Compute and check result
  53. result = series.groupby(levels).mean()
  54. assert_series_equal(result, expected)