Repository: modin-project/modin

Issue:
DataFrame.groupby on category broken
### System information
- Linux ip-172-16-74-185 4.14.171-105.231.amzn1.x86_64 #1 SMP Thu Feb 27 23:49:15 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
- **Modin version** (`modin.__version__`): 0.7.3
- **Python version**: 3.6.6 |Anaconda, Inc.| (default, Oct  9 2018, 12:34:16)
- **Code we can use to reproduce**:

# test dataframe

data1 = ['Marc','Lori','Sam', 'Alexandra',
         None, np.NaN, 
         'Marc','Lori','Sam', 'Alexandra', 
         'Marc','Lori','Sam', 'Alexandra']
data2 = [1, 1, 1, 1,
        0,0,
        1, 1, 1, 1,
        1, 1, 1, 1]
data3 = [1.0, 1.0, 1.0, 1.0,
        None, np.NaN,
        1.0, 1.0, 1.0, 1.0,
        1.0, 1.0, 1.0, 1.0]
data4 = ['Same','Same','Same', 'Same',
         None, np.NaN, 
         'Same','Same','Same', 'Same', 
         'Same','Same','Same', 'Same']
data5 = ['Diff1','Diff2','Diff3', 'Diff4',
         None, np.NaN, 
         'Diff5','Diff6','Diff7', 'Diff8',
         'Diff1','Diff2','Diff3', 'Diff4',]

df = pandas_impl_module.DataFrame(data={
    'col1': data1,
    'col2': data2,
    'col3': data3,
    'col4': data4,
    'col5': data5
})
#print("col2 input data type = {}".format(type(data2[0])))
df.info()

df.astype({'col1': 'category'}, copy=False)
df.info()

grpby = df.groupby(by=['col1'], as_index=True, sort=False, observed=False)

grpby.groups

grpby.indices

### Describe the problem
when working with category types in the dataframe, this appears to throw something off in groupby
groupby a category column, then try
accessing the groups or indices attribute of the groupby
exception raised
converting these back to strings and re-doing the groupby appears to work around this problem

### Source code / logs
---------------------------------------------------------------------------
>>> grpby.groups

AttributeError                            Traceback (most recent call last)
<ipython-input-54-fc316fedb9d8> in <module>
----> 1 grpby.groups
~/anaconda3/envs/run-nsf/lib/python3.6/site-packages/modin/pandas/groupby.py in __getattr__(self, key)
     99             if key in self._columns:
    100                 return self._default_to_pandas(lambda df: df.__getitem__(key))
--> 101             raise e
    102 
    103     _index_grouped_cache = None

~/anaconda3/envs/run-nsf/lib/python3.6/site-packages/modin/pandas/groupby.py in __getattr__(self, key)
     95         """
     96         try:
---> 97             return object.__getattribute__(self, key)
     98         except AttributeError as e:
     99             if key in self._columns:

~/anaconda3/envs/run-nsf/lib/python3.6/site-packages/modin/pandas/groupby.py in groups(self)
    202     @property
    203     def groups(self):
--> 204         return self._index_grouped
    205 
    206     def min(self, **kwargs):

~/anaconda3/envs/run-nsf/lib/python3.6/site-packages/modin/pandas/groupby.py in __getattr__(self, key)
     99             if key in self._columns:
    100                 return self._default_to_pandas(lambda df: df.__getitem__(key))
--> 101             raise e
    102 
    103     _index_grouped_cache = None

~/anaconda3/envs/run-nsf/lib/python3.6/site-packages/modin/pandas/groupby.py in __getattr__(self, key)
     95         """
     96         try:
---> 97             return object.__getattribute__(self, key)
     98         except AttributeError as e:
     99             if key in self._columns:

~/anaconda3/envs/run-nsf/lib/python3.6/site-packages/modin/pandas/groupby.py in _index_grouped(self)
    130                     by = self._by
    131                 if self._axis == 0:
--> 132                     self._index_grouped_cache = self._index.groupby(by)
    133                 else:
    134                     self._index_grouped_cache = self._columns.groupby(by)

~/anaconda3/envs/run-nsf/lib/python3.6/site-packages/pandas/core/indexes/base.py in groupby(self, values)
   4533             values = values.values
   4534         values = ensure_categorical(values)
-> 4535         result = values._reverse_indexer()
   4536 
   4537         # map to the label

~/anaconda3/envs/run-nsf/lib/python3.6/site-packages/pandas/core/generic.py in __getattr__(self, name)
   5272             if self._info_axis._can_hold_identifiers_and_holds_name(name):
   5273                 return self[name]
-> 5274             return object.__getattribute__(self, name)
   5275 
   5276     def __setattr__(self, name: str, value) -> None:

AttributeError: 'Series' object has no attribute '_reverse_indexer'

Discussion:
modin-bot: <h1 align="center"><img width=7% alt="" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Teamcity_Logo.png/600px-Teamcity_Logo.png">
    TeamCity Python test results bot</h1>

<h3 align="center">Tests FAILed</h3>

<details><summary>Tests Logs</summary>


```
============================= test session starts ==============================
platform linux -- Python 3.7.7, pytest-5.4.3, py-1.8.1, pluggy-0.13.1
rootdir: /modin, inifile: setup.cfg
plugins: openfiles-0.5.0, remotedata-0.3.2, cov-2.10.0, custom-exit-code-0.3.0, forked-1.2.0, testmon-1.0.2, xdist-1.33.0
collected 94 items

modin/pandas/test/test_io.py .................sX..........s............. [ 45%]
....s..............s..s.X.....s.................ss.                      [100%]

----------- coverage: platform linux, python 3.7.7-final-0 -----------
Name                                                               Stmts   Miss  Cover
--------------------------------------------------------------------------------------
modin/__init__.py                                                     76     38    50%
modin/_version.py                                                    272    172    37%
modin/apply_license_header.py                                         19     19     0%
modin/backends/__init__.py                                             0      0   100%
modin/backends/base/__init__.py                                        0      0   100%
modin/backends/base/query_compiler.py                                129      1    99%
modin/backends/pandas/__init__.py                                      0      0   100%
modin/backends/pandas/parsers.py                                     207    175    15%
modin/backends/pandas/query_compiler.py                              811    486    40%
modin/data_management/__init__.py                                      0      0   100%
modin/data_management/dispatcher.py                                   78     16    79%
modin/data_management/factories.py                                    85     26    69%
modin/data_management/functions/__init__.py                            7      0   100%
modin/data_management/functions/binary_function.py                    21     14    33%
modin/data_management/functions/foldfunction.py                        6      1    83%
modin/data_management/functions/function.py                            6      1    83%
modin/data_management/functions/groupby_function.py                   55     49    11%
modin/data_management/functions/mapfunction.py                         6      1    83%
modin/data_management/functions/mapreducefunction.py                   9      2    78%
modin/data_management/functions/reductionfunction.py                   6      1    83%
modin/data_management/utils.py                                        32     12    62%
modin/engines/__init__.py                                              0      0   100%
modin/engines/base/__init__.py                                         0      0   100%
modin/engines/base/frame/__init__.py                                   0      0   100%
modin/engines/base/frame/axis_partition.py                            45     20    56%
modin/engines/base/frame/data.py                                     491    324    34%
modin/engines/base/frame/partition.py                                  1      0   100%
modin/engines/base/frame/partition_manager.py                        159     88    45%
modin/engines/base/io/__init__.py                                     12      0   100%
modin/engines/base/io/column_stores/__init__.py                        0      0   100%
modin/engines/base/io/column_stores/column_store_reader.py            40     29    28%
modin/engines/base/io/column_stores/feather_reader.py                  9      5    44%
modin/engines/base/io/column_stores/hdf_reader.py                      3      0   100%
modin/engines/base/io/column_stores/parquet_reader.py                 34     29    15%
modin/engines/base/io/file_reader.py                                  85     66    22%
modin/engines/base/io/io.py                                          110      6    95%
modin/engines/base/io/sql/__init__.py                                  0      0   100%
modin/engines/base/io/sql/sql_reader.py                               39     31    21%
modin/engines/base/io/text/__init__.py                                 0      0   100%
modin/engines/base/io/text/csv_reader.py                             112    105     6%
modin/engines/base/io/text/excel_reader.py                           106     97     8%
modin/engines/base/io/text/fwf_reader.py                             115    108     6%
modin/engines/base/io/text/json_reader.py                             50     43    14%
modin/engines/base/io/text/text_file_reader.py                        34     24    29%
modin/engines/base/series/__init__.py                                  0      0   100%
modin/engines/dask/__init__.py                                         0      0   100%
modin/engines/dask/pandas_on_dask/__init__.py                          0      0   100%
modin/engines/dask/pandas_on_dask/frame/__init__.py                    0      0   100%
modin/engines/dask/pandas_on_dask/frame/axis_partition.py             27     27     0%
modin/engines/dask/pandas_on_dask/frame/data.py                       15     15     0%
modin/engines/dask/pandas_on_dask/frame/partition.py                  75     75     0%
modin/engines/dask/pandas_on_dask/frame/partition_manager.py          44     44     0%
modin/engines/dask/pandas_on_dask/io.py                               17     17     0%
modin/engines/dask/pandas_on_dask/series/__init__.py                   0      0   100%
modin/engines/dask/task_wrapper.py                                     9      9     0%
modin/engines/python/__init__.py                                       0      0   100%
modin/engines/python/pandas_on_python/__init__.py                      0      0   100%
modin/engines/python/pandas_on_python/frame/__init__.py                0      0   100%
modin/engines/python/pandas_on_python/frame/axis_partition.py         14      0   100%
modin/engines/python/pandas_on_python/frame/data.py                    4      0   100%
modin/engines/python/pandas_on_python/frame/partition.py              65      6    91%
modin/engines/python/pandas_on_python/frame/partition_manager.py       7      0   100%
modin/engines/python/pandas_on_python/io.py                            6      0   100%
modin/engines/python/pandas_on_python/series/__init__.py               0      0   100%
modin/engines/ray/__init__.py                                          0      0   100%
modin/engines/ray/generic/__init__.py                                  0      0   100%
modin/engines/ray/generic/frame/__init__.py                            0      0   100%
modin/engines/ray/generic/frame/partition_manager.py                  10     10     0%
modin/engines/ray/generic/io.py                                       14     14     0%
modin/engines/ray/generic/series/__init__.py                           0      0   100%
modin/engines/ray/pandas_on_ray/__init__.py                            0      0   100%
modin/engines/ray/pandas_on_ray/frame/__init__.py                      0      0   100%
modin/engines/ray/pandas_on_ray/frame/axis_partition.py               22     22     0%
modin/engines/ray/pandas_on_ray/frame/data.py                         11     11     0%
modin/engines/ray/pandas_on_ray/frame/partition.py                    86     86     0%
modin/engines/ray/pandas_on_ray/frame/partition_manager.py            43     43     0%
modin/engines/ray/pandas_on_ray/io.py                                 18     18     0%
modin/engines/ray/pandas_on_ray/series/__init__.py                     0      0   100%
modin/engines/ray/task_wrapper.py                                      7      7     0%
modin/engines/ray/utils.py                                            52     52     0%
modin/error_message.py                                                22      5    77%
modin/experimental/__init__.py                                         0      0   100%
modin/experimental/cloud/__init__.py                                   6      6     0%
modin/experimental/cloud/base.py                                      36     36     0%
modin/experimental/cloud/cluster.py                                   90     90     0%
modin/experimental/cloud/connection.py                                98     98     0%
modin/experimental/cloud/rayscale.py                                 107    107     0%
modin/experimental/engines/__init__.py                                 0      0   100%
modin/experimental/engines/pandas_on_ray/__init__.py                   0      0   100%
modin/experimental/engines/pandas_on_ray/io_exp.py                    38     38     0%
modin/experimental/engines/pandas_on_ray/sql.py                       66     66     0%
modin/experimental/pandas/__init__.py                                  6      6     0%
modin/experimental/pandas/io_exp.py                                    7      7     0%
modin/pandas/__init__.py                                              38      7    82%
modin/pandas/base.py                                                1213    916    24%
modin/pandas/concat.py                                                58     48    17%
modin/pandas/dataframe.py                                            870    675    22%
modin/pandas/datetimes.py                                              7      3    57%
modin/pandas/general.py                                               53     35    34%
modin/pandas/groupby.py                                              294    204    31%
modin/pandas/indexing.py                                             209    209     0%
modin/pandas/io.py                                                   147     11    93%
modin/pandas/iterator.py                                              17     11    35%
modin/pandas/reshape.py                                               30     20    33%
modin/pandas/series.py                                               945    625    34%
modin/pandas/utils.py                                                 28      3    89%
--------------------------------------------------------------------------------------
TOTAL                                                               8201   5671    31%


=========== 84 passed, 8 skipped, 2 xpassed, 146 warnings in 45.59s ============
Closing remaining open files:test_write_modin.hdf...donetest_write_pandas.hdf...done
============================= test session starts ==============================
platform linux -- Python 3.7.7, pytest-5.4.3, py-1.8.1, pluggy-0.13.1
rootdir: /modin, inifile: setup.cfg
plugins: openfiles-0.5.0, remotedata-0.3.2, cov-2.10.0, custom-exit-code-0.3.0, forked-1.2.0, testmon-1.0.2, xdist-1.33.0
gw0 I / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 I / gw8 I / gw9 I / gw10 I / gw11 I / gw12 I / gw13 I / gw14 I / gw15 I / gw16 I / gw17 I / gw18 I / gw19 I / gw20 I / gw21 I / gw22 I / gw23 I / gw24 I / gw25 I / gw26 I / gw27 I / gw28 I / gw29 I / gw30 I / gw31 I / gw32 I / gw33 I / gw34 I / gw35 I / gw36 I / gw37 I / gw38 I / gw39 I / gw40 I / gw41 I / gw42 I / gw43 I / gw44 I / gw45 I / gw46 I / gw47 I
gw0 [19119] / gw1 [19119] / gw2 [19119] / gw3 [19119] / gw4 [19119] / gw5 [19119] / gw6 [19119] / gw7 [19119] / gw8 [19119] / gw9 [19119] / gw10 [19119] / gw11 [19119] / gw12 [19119] / gw13 [19119] / gw14 [19119] / gw15 [19119] / gw16 [19119] / gw17 [19119] / gw18 [19119] / gw19 [19119] / gw20 [19119] / gw21 [19119] / gw22 [19119] / gw23 [19119] / gw24 [19119] / gw25 [19119] / gw26 [19119] / gw27 [19119] / gw28 [19119] / gw29 [19119] / gw30 [19119] / gw31 [19119] / gw32 [19119] / gw33 [19119] / gw34 [19119] / gw35 [19119] / gw36 [19119] / gw37 [19119] / gw38 [19119] / gw39 [19119] / gw40 [19119] / gw41 [19119] / gw42 [19119] / gw43 [19119] / gw44 [19119] / gw45 [19119] / gw46 [19119] / gw47 [19119]

........................................................................ [  0%]
........................................................................ [  0%]
........................................................................ [  1%]
......................................................................... [  1%]
........................................................................... [  1%]
......................................................................... [  2%]
........................................................................ [  2%]
........................................................................ [  2%]
.......................................s................................. [  3%]
........................................................................... [  3%]
.............................................................x............. [  4%]
..x................x.................x.........................X.....s.. [  4%]
...X...........X.............X.........x.X.............sX....x....X.x.X.. [  4%]
...X...........X......x.x....X...x.X.....X.....X.x.....XX..xxX..X.....X. [  5%]
X.........X..x..XX.....xXX..X...XX...x.X......XX....XXX.XXXX.X.....X.X.. [  5%]
..X.X......X...X..XX....XXXXX.X....XX..X....X.........XXX..XX.XXXX...X.. [  6%]
.....XX.XXX..XX...X.X.X..XXX..X..X.X...XX.XXX..XXX...xXXX...XX....X...X. [  6%]
X...XXXXX..X.XX...xXX.X..XX.....X..XX...X..X.X..X.XX.x.XX.X....X....X... [  6%]
XX....XX.xX.X.XX..XX.X....X....X.X..XX....X..X.XX.XX...x.XX.X.......X.X. [  7%]
.XX.X..X.....X..XX....XXX.X......X.X........xX.....X...X.........X...... [  7%]
..X...xx.....xX.....X.x.Xx.........X.......X....Xx.....XX....X.x.XX...... [  7%]
....X........X...XX.....XX.......X..X........X..X..........XX....XX........ [  8%]
X...X...........X.....x...X.X..xXX........X...X............X...x.x..X.X.. [  8%]
.x.X.........X..X..X.x......XX..x.x.X..X.....XX.................Xx.....X. [  9%]
X...xX...XX....X.X..x....X........X.Xx.X...XX..XXX..XX....X.X....X...X... [  9%]
.....XX.X.X...X.XXXX.X.X......X.X..X....X.......XXXX.X...X.XXXX....X.... [  9%]
.......XX.XXX.....XXXX.X...X..XX.X....X..X.X.....XX.XX.X.X..XX..XxX.X.X. [ 10%]
.XX....X....XX.....XX.XX.X.X..XX...XxXX.X...XX....X...XX.......X.X..X.X.. [ 10%]
.XX...X.X.X...X.....X...XX........X.xXX.Xx.XX...X.X.X.......X.X...X.X.... [ 10%]
....X.XXX.XX.X.....X.XxX......X.X....X.X..X.X...X...X.X.......X.XXX..X... [ 11%]
.X...........xX.x...X...X.........X.........X.x.........x.X.x..X...Xxx.. [ 11%]
.....X........X.X..X.......XX.X.X...XXx.......X.......X.X.X.X.......X.X.. [ 12%]
X.......X....X..X........X.X...X.xX...X...X...............X.....X.XX..... [ 12%]
...X.xX.....X...........X...................X...X.X.......X..........X.. [ 12%]
...............X......X..................XX............x.......XX....... [ 13%]
x.X..............xXX....................X..................XX........... [ 13%]
.......X..................X......X............X...X.............X.X...... [ 14%]
...............x....x...X......X.......xX..................x........x.x. [ 14%]
X........x.......x.....................Xx.................X......xX....x.. [ 14%]
........X...........XX..X....XX...Xx.......X........X.......x....X.......x [ 15%]
..X..........x.X......x...........X.X.X...X..x....x.x....X.........X.... [ 15%]
....XXX....X.....x.................X....X.Xx..X........X............X.... [ 15%]
....X.X...............X..........X.....X..........X......X.........X........ [ 16%]
.....................................x............s.X..........x........ [ 16%]
.............X.......................................................x.... [ 17%]
.X.......x..X......X.........X...X.......................X..............x. [ 17%]
............X.................XX................X........................... [ 17%]
...X....X....................X....x.......................X.....X....... [ 18%]
............X...X..........................X........................X.s... [ 18%]
....................X......................................X............ [ 19%]
.............X...........................X.............................. [ 19%]
......................................x..................................... [ 19%]
........................................................................ [ 20%]
......................................................................... [ 20%]
.....................................x.................................... [ 20%]
......................................................................... [ 21%]
........................................................................ [ 21%]
........................................................................ [ 22%]
........................................................................ [ 22%]
......................................................................... [ 22%]
......................................................................... [ 23%]
........................................................................ [ 23%]
s......................................................................... [ 23%]
...............X..x...........................x..x..........xx.......... [ 24%]
.............................................................................. [ 24%]
......................................................................... [ 25%]
......................................................................... [ 25%]
......................................................................... [ 25%]
........................................................................ [ 26%]
........................................................................ [ 26%]
........................................................................ [ 27%]
.............................................................................. [ 27%]
........................................................................ [ 27%]
........................................................................... [ 28%]
........................................................................ [ 28%]
.......................................................................... [ 28%]
......................................................................... [ 29%]
........................................................................ [ 29%]
.............................................................................. [ 30%]
................................................................................ [ 30%]
.......................................................................... [ 30%]
........................................................................ [ 31%]
.......................................................................... [ 31%]
......................................................................... [ 32%]
...........ssss.sssss...s.ssssss.ss..................................... [ 32%]
........................................................................ [ 32%]
........................................................................ [ 33%]
......................................................................... [ 33%]
........................................................................ [ 34%]
........................................................................ [ 34%]
........................................................................ [ 34%]
........................................................................ [ 35%]
........................................................................ [ 35%]
......................................................................... [ 35%]
........................................................................ [ 36%]
........................................................................ [ 36%]
........................................................................ [ 37%]
......................................................................... [ 37%]
...........................................................X....X.....X. [ 37%]
.........X........X....X................................................ [ 38%]
........................................................................ [ 38%]
........................................................................ [ 38%]
........................................................................ [ 39%]
........................................................................ [ 39%]
........................................................................ [ 40%]
........................................................................ [ 40%]
........................................................................ [ 40%]
........................................................................ [ 41%]
........................................................................ [ 41%]
........................................................................ [ 41%]
........................................................................ [ 42%]
........................................................................ [ 42%]
........................................................................ [ 43%]
........................................................................ [ 43%]
........................................................................ [ 43%]
........................................................................ [ 44%]
........................................................................ [ 44%]
........................................................................ [ 44%]
......................................................................... [ 45%]
......................................................................... [ 45%]
........................................................................ [ 46%]
........................................................................ [ 46%]
........................................................................ [ 46%]
........................................................................ [ 47%]
........................................................................ [ 47%]
........................................................................ [ 47%]
........................................................................ [ 48%]
......................................................................... [ 48%]
........................................................................ [ 49%]
........................................................................ [ 49%]
........................................................................ [ 49%]
........................................................................ [ 50%]
........................................................................ [ 50%]
........................................................................ [ 50%]
........................................................................ [ 51%]
........................................................................ [ 51%]
........................................................................ [ 52%]
......................................................................... [ 52%]
........................................................................ [ 52%]
........................................................................ [ 53%]
........................................................................ [ 53%]
........................................................................ [ 54%]
........................................................................ [ 54%]
........................................................................ [ 54%]
........................................................................ [ 55%]
........................................................................ [ 55%]
........................................................................ [ 55%]
......................................................................... [ 56%]
........................................................................ [ 56%]
........................................................................ [ 57%]
........................................................................ [ 57%]
........................................................................ [ 57%]
........................................................................ [ 58%]
........................................................................ [ 58%]
........................................................................ [ 58%]
........................................................................ [ 59%]
........................................................................ [ 59%]
......................................................................... [ 60%]
........................................................................ [ 60%]
........................................................................ [ 60%]
.......................................................................... [ 61%]
........................................................................ [ 61%]
........................................................................ [ 61%]
........................................................................ [ 62%]
........................................................................ [ 62%]
........................................................................ [ 63%]
........................................................................ [ 63%]
........................................................................ [ 63%]
........................................................................ [ 64%]
........................................................................ [ 64%]
......................................................................... [ 64%]
........................................................................ [ 65%]
........................................................................ [ 65%]
........................................................................ [ 66%]
........................................................................ [ 66%]
........................................................................ [ 66%]
........................................................................ [ 67%]
........................................................................ [ 67%]
........................................................................ [ 67%]
........................................................................ [ 68%]
......................................................................... [ 68%]
......................................................................... [ 69%]
........................................................................ [ 69%]
........................................................................ [ 69%]
........................................................................ [ 70%]
......................................................................... [ 70%]
........................................................................ [ 71%]
........................................................................ [ 71%]
........................................................................ [ 71%]
......................................................................... [ 72%]
........................................................................ [ 72%]
......................................................................... [ 72%]
........................................................................ [ 73%]
........................................................................ [ 73%]
........................................................................ [ 74%]
........................................................................ [ 74%]
........................................................................ [ 74%]
........................................................................ [ 75%]
........................................................................ [ 75%]
........................................................................ [ 75%]
........................................................................ [ 76%]
......................................................................... [ 76%]
........................................................................ [ 77%]
........................................................................ [ 77%]
......................................................................... [ 77%]
........................................................................ [ 78%]
........................................................................ [ 78%]
........................................................................ [ 78%]
........................................................................ [ 79%]
......................................................................... [ 79%]
........................................................................ [ 80%]
........................................................................ [ 80%]
........................................................................ [ 80%]
........................................................................ [ 81%]
........................................................................ [ 81%]
........................................................................ [ 81%]
........................................................................ [ 82%]
........................................................................ [ 82%]
........................................................................ [ 83%]
........................................................................ [ 83%]
........................................................................ [ 83%]
........................................................................ [ 84%]
........................................................................ [ 84%]
......................................................................... [ 84%]
......................................................................... [ 85%]
........................................................................ [ 85%]
........................................................................ [ 86%]
........................................................................ [ 86%]
........................................................................ [ 86%]
........................................................................ [ 87%]
......................................................................... [ 87%]
........................................................................ [ 87%]
........................................................................ [ 88%]
........................................................................ [ 88%]
........................................................................ [ 89%]
........................................................................ [ 89%]
........................................................................ [ 89%]
............................sss.s.ss............................s....... [ 90%]
.......................................................................... [ 90%]
............X................x............x..............X.............. [ 91%]
...X...........x................x....................................... [ 91%]
........................................................................ [ 91%]
........................................................................ [ 92%]
........................................................................ [ 92%]
........................................................................ [ 92%]
........................................................................ [ 93%]
........................................................................ [ 93%]
.........................X.............................................. [ 94%]
........................................................................ [ 94%]
......................................................................... [ 94%]
........................................................................ [ 95%]
........................................................................ [ 95%]
..........................................................x.xF..xF.xx... [ 95%]
x.........x....Fx.....x.........x...x.............x...........x..x...... [ 96%]
..x..................F....................F............................. [ 96%]
.....x.................................................................. [ 97%]
........................................................................ [ 97%]
........................................................................ [ 97%]
........................................................................ [ 98%]
........................................................................ [ 98%]
........................................................................ [ 98%]
........................................................................ [ 99%]
........................................................................ [ 99%]
............................................................             [100%]
=================================== FAILURES ===================================
_________________ test_simple_row_groupby[True-False-<lambda>] _________________
[gw15] linux -- Python 3.7.7 /opt/conda/bin/python
Traceback (most recent call last):
  File "/modin/modin/pandas/test/test_groupby.py", line 371, in test_simple_row_groupby
    eval___getattr__(modin_groupby, pandas_groupby, "col3")
  File "/modin/modin/pandas/test/test_groupby.py", line 1017, in eval___getattr__
    df_equals(modin_result, pandas_result)
  File "/modin/modin/pandas/test/utils.py", line 509, in df_equals
    if df1 != df2:
  File "/opt/conda/lib/python3.7/site-packages/pandas/core/generic.py", line 1479, in __nonzero__
    f"The truth value of a {type(self).__name__} is ambiguous. "
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
___________________ test_simple_row_groupby[True-False-by0] ____________________
[gw6] linux -- Python 3.7.7 /opt/conda/bin/python
Traceback (most recent call last):
  File "/modin/modin/pandas/test/test_groupby.py", line 371, in test_simple_row_groupby
    eval___getattr__(modin_groupby, pandas_groupby, "col3")
  File "/modin/modin/pandas/test/test_groupby.py", line 1017, in eval___getattr__
    df_equals(modin_result, pandas_result)
  File "/modin/modin/pandas/test/utils.py", line 509, in df_equals
    if df1 != df2:
  File "/opt/conda/lib/python3.7/site-packages/pandas/core/generic.py", line 1479, in __nonzero__
    f"The truth value of a {type(self).__name__} is ambiguous. "
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
___________________ test_simple_row_groupby[True-False-by5] ____________________
[gw17] linux -- Python 3.7.7 /opt/conda/bin/python
Traceback (most recent call last):
  File "/modin/modin/pandas/test/test_groupby.py", line 371, in test_simple_row_groupby
    eval___getattr__(modin_groupby, pandas_groupby, "col3")
  File "/modin/modin/pandas/test/test_groupby.py", line 1017, in eval___getattr__
    df_equals(modin_result, pandas_result)
  File "/modin/modin/pandas/test/utils.py", line 509, in df_equals
    if df1 != df2:
  File "/opt/conda/lib/python3.7/site-packages/pandas/core/generic.py", line 1479, in __nonzero__
    f"The truth value of a {type(self).__name__} is ambiguous. "
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
___________________ test_simple_row_groupby[True-False-by10] ___________________
[gw20] linux -- Python 3.7.7 /opt/conda/bin/python
Traceback (most recent call last):
  File "/modin/modin/pandas/test/test_groupby.py", line 371, in test_simple_row_groupby
    eval___getattr__(modin_groupby, pandas_groupby, "col3")
  File "/modin/modin/pandas/test/test_groupby.py", line 1017, in eval___getattr__
    df_equals(modin_result, pandas_result)
  File "/modin/modin/pandas/test/utils.py", line 509, in df_equals
    if df1 != df2:
  File "/opt/conda/lib/python3.7/site-packages/pandas/core/generic.py", line 1479, in __nonzero__
    f"The truth value of a {type(self).__name__} is ambiguous. "
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
___________________ test_simple_row_groupby[True-False-col2] ___________________
[gw42] linux -- Python 3.7.7 /opt/conda/bin/python
Traceback (most recent call last):
  File "/modin/modin/pandas/test/test_groupby.py", line 371, in test_simple_row_groupby
    eval___getattr__(modin_groupby, pandas_groupby, "col3")
  File "/modin/modin/pandas/test/test_groupby.py", line 1017, in eval___getattr__
    df_equals(modin_result, pandas_result)
  File "/modin/modin/pandas/test/utils.py", line 509, in df_equals
    if df1 != df2:
  File "/opt/conda/lib/python3.7/site-packages/pandas/core/generic.py", line 1479, in __nonzero__
    f"The truth value of a {type(self).__name__} is ambiguous. "
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

----------- coverage: platform linux, python 3.7.7-final-0 -----------
Name                                                               Stmts   Miss  Cover
--------------------------------------------------------------------------------------
modin/__init__.py                                                     76     38    50%
modin/_version.py                                                    272    172    37%
modin/apply_license_header.py                                         19     19     0%
modin/backends/__init__.py                                             0      0   100%
modin/backends/base/__init__.py                                        0      0   100%
modin/backends/base/query_compiler.py                                129      0   100%
modin/backends/pandas/__init__.py                                      0      0   100%
modin/backends/pandas/parsers.py                                     207    171    17%
modin/backends/pandas/query_compiler.py                              811     35    96%
modin/data_management/__init__.py                                      0      0   100%
modin/data_management/dispatcher.py                                   78     16    79%
modin/data_management/factories.py                                    85     26    69%
modin/data_management/functions/__init__.py                            7      0   100%
modin/data_management/functions/binary_function.py                    21      0   100%
modin/data_management/functions/foldfunction.py                        6      0   100%
modin/data_management/functions/function.py                            6      1    83%
modin/data_management/functions/groupby_function.py                   55      4    93%
modin/data_management/functions/mapfunction.py                         6      0   100%
modin/data_management/functions/mapreducefunction.py                   9      0   100%
modin/data_management/functions/reductionfunction.py                   6      0   100%
modin/data_management/utils.py                                        32      0   100%
modin/engines/__init__.py                                              0      0   100%
modin/engines/base/__init__.py                                         0      0   100%
modin/engines/base/frame/__init__.py                                   0      0   100%
modin/engines/base/frame/axis_partition.py                            45     10    78%
modin/engines/base/frame/data.py                                     491     28    94%
modin/engines/base/frame/partition.py                                  1      0   100%
modin/engines/base/frame/partition_manager.py                        159     20    87%
modin/engines/base/io/__init__.py                                     12      0   100%
modin/engines/base/io/column_stores/__init__.py                        0      0   100%
modin/engines/base/io/column_stores/column_store_reader.py            40     29    28%
modin/engines/base/io/column_stores/feather_reader.py                  9      5    44%
modin/engines/base/io/column_stores/hdf_reader.py                      3      0   100%
modin/engines/base/io/column_stores/parquet_reader.py                 34     29    15%
modin/engines/base/io/file_reader.py                                  85     66    22%
modin/engines/base/io/io.py                                          110      6    95%
modin/engines/base/io/sql/__init__.py                                  0      0   100%
modin/engines/base/io/sql/sql_reader.py                               39     31    21%
modin/engines/base/io/text/__init__.py                                 0      0   100%
modin/engines/base/io/text/csv_reader.py                             112    105     6%
modin/engines/base/io/text/excel_reader.py                           106     97     8%
modin/engines/base/io/text/fwf_reader.py                             115    108     6%
modin/engines/base/io/text/json_reader.py                             50     43    14%
modin/engines/base/io/text/text_file_reader.py                        34     24    29%
modin/engines/base/series/__init__.py                                  0      0   100%
modin/engines/dask/__init__.py                                         0      0   100%
modin/engines/dask/pandas_on_dask/__init__.py                          0      0   100%
modin/engines/dask/pandas_on_dask/frame/__init__.py                    0      0   100%
modin/engines/dask/pandas_on_dask/frame/axis_partition.py             27     27     0%
modin/engines/dask/pandas_on_dask/frame/data.py                       15     15     0%
modin/engines/dask/pandas_on_dask/frame/partition.py                  75     75     0%
modin/engines/dask/pandas_on_dask/frame/partition_manager.py          44     44     0%
modin/engines/dask/pandas_on_dask/io.py                               17     17     0%
modin/engines/dask/pandas_on_dask/series/__init__.py                   0      0   100%
modin/engines/dask/task_wrapper.py                                     9      9     0%
modin/engines/python/__init__.py                                       0      0   100%
modin/engines/python/pandas_on_python/__init__.py                      0      0   100%
modin/engines/python/pandas_on_python/frame/__init__.py                0      0   100%
modin/engines/python/pandas_on_python/frame/axis_partition.py         14      0   100%
modin/engines/python/pandas_on_python/frame/data.py                    4      0   100%
modin/engines/python/pandas_on_python/frame/partition.py              65      4    94%
modin/engines/python/pandas_on_python/frame/partition_manager.py       7      0   100%
modin/engines/python/pandas_on_python/io.py                            6      0   100%
modin/engines/python/pandas_on_python/series/__init__.py               0      0   100%
modin/engines/ray/__init__.py                                          0      0   100%
modin/engines/ray/generic/__init__.py                                  0      0   100%
modin/engines/ray/generic/frame/__init__.py                            0      0   100%
modin/engines/ray/generic/frame/partition_manager.py                  10     10     0%
modin/engines/ray/generic/io.py                                       14     14     0%
modin/engines/ray/generic/series/__init__.py                           0      0   100%
modin/engines/ray/pandas_on_ray/__init__.py                            0      0   100%
modin/engines/ray/pandas_on_ray/frame/__init__.py                      0      0   100%
modin/engines/ray/pandas_on_ray/frame/axis_partition.py               22     22     0%
modin/engines/ray/pandas_on_ray/frame/data.py                         11     11     0%
modin/engines/ray/pandas_on_ray/frame/partition.py                    86     86     0%
modin/engines/ray/pandas_on_ray/frame/partition_manager.py            43     43     0%
modin/engines/ray/pandas_on_ray/io.py                                 18     18     0%
modin/engines/ray/pandas_on_ray/series/__init__.py                     0      0   100%
modin/engines/ray/task_wrapper.py                                      7      7     0%
modin/engines/ray/utils.py                                            52     52     0%
modin/error_message.py                                                22      2    91%
modin/experimental/__init__.py                                         0      0   100%
modin/experimental/cloud/__init__.py                                   6      6     0%
modin/experimental/cloud/base.py                                      36     36     0%
modin/experimental/cloud/cluster.py                                   90     90     0%
modin/experimental/cloud/connection.py                                98     98     0%
modin/experimental/cloud/rayscale.py                                 107    107     0%
modin/experimental/engines/__init__.py                                 0      0   100%
modin/experimental/engines/pandas_on_ray/__init__.py                   0      0   100%
modin/experimental/engines/pandas_on_ray/io_exp.py                    38     38     0%
modin/experimental/engines/pandas_on_ray/sql.py                       66     66     0%
modin/experimental/pandas/__init__.py                                  6      6     0%
modin/experimental/pandas/io_exp.py                                    7      7     0%
modin/pandas/__init__.py                                              38      7    82%
modin/pandas/base.py                                                1213     52    96%
modin/pandas/concat.py                                                58      5    91%
modin/pandas/dataframe.py                                            870     95    89%
modin/pandas/datetimes.py                                              7      0   100%
modin/pandas/general.py                                               53      3    94%
modin/pandas/groupby.py                                              294     38    87%
modin/pandas/indexing.py                                             209     32    85%
modin/pandas/io.py                                                   147     11    93%
modin/pandas/iterator.py                                              17      0   100%
modin/pandas/reshape.py                                               30      0   100%
modin/pandas/series.py                                               945     79    92%
modin/pandas/utils.py                                                 28      3    89%
--------------------------------------------------------------------------------------
TOTAL                                                               8201   2318    72%

=========================== short test summary info ============================
FAILED modin/pandas/test/test_groupby.py::test_simple_row_groupby[True-False-<lambda>]
FAILED modin/pandas/test/test_groupby.py::test_simple_row_groupby[True-False-by0]
FAILED modin/pandas/test/test_groupby.py::test_simple_row_groupby[True-False-by5]
FAILED modin/pandas/test/test_groupby.py::test_simple_row_groupby[True-False-by10]
FAILED modin/pandas/test/test_groupby.py::test_simple_row_groupby[True-False-col2]
= 5 failed, 18455 passed, 31 skipped, 113 xfailed, 515 xpassed, 33058 warnings in 869.11s (0:14:29) =

TOTAL                                                               8201   2318    72%

=========================== short test summary info ============================
FAILED modin/pandas/test/test_groupby.py::test_simple_row_groupby[True-False-<lambda>]
FAILED modin/pandas/test/test_groupby.py::test_simple_row_groupby[True-False-by0]
FAILED modin/pandas/test/test_groupby.py::test_simple_row_groupby[True-False-by5]
FAILED modin/pandas/test/test_groupby.py::test_simple_row_groupby[True-False-by10]
FAILED modin/pandas/test/test_groupby.py::test_simple_row_groupby[True-False-col2]
= 5 failed, 18455 passed, 31 skipped, 113 xfailed, 515 xpassed, 33058 warnings in 869.11s (0:14:29) =

```

</details>

modin-bot: <h1 align="center"><img width=7% alt="" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Teamcity_Logo.png/600px-Teamcity_Logo.png">
    TeamCity Ray test results bot</h1>

<h3 align="center">Tests PASSed</h3>

<details><summary>Tests Logs</summary>


```
============================= test session starts ==============================
platform linux -- Python 3.7.7, pytest-5.4.3, py-1.8.1, pluggy-0.13.1
rootdir: /modin, inifile: setup.cfg
plugins: openfiles-0.5.0, remotedata-0.3.2, cov-2.10.0, custom-exit-code-0.3.0, forked-1.2.0, testmon-1.0.2, xdist-1.33.0
collected 94 items

modin/pandas/test/test_io.py .................sx..........s............. [ 45%]
...................s..s.X.....s.................ss.                      [100%]

----------- coverage: platform linux, python 3.7.7-final-0 -----------
Name                                                               Stmts   Miss  Cover
--------------------------------------------------------------------------------------
modin/__init__.py                                                     76     38    50%
modin/_version.py                                                    272    172    37%
modin/apply_license_header.py                                         19     19     0%
modin/backends/__init__.py                                             0      0   100%
modin/backends/base/__init__.py                                        0      0   100%
modin/backends/base/query_compiler.py                                129      1    99%
modin/backends/pandas/__init__.py                                      0      0   100%
modin/backends/pandas/parsers.py                                     207    119    43%
modin/backends/pandas/query_compiler.py                              811    481    41%
modin/data_management/__init__.py                                      0      0   100%
modin/data_management/dispatcher.py                                   78     16    79%
modin/data_management/factories.py                                    85     26    69%
modin/data_management/functions/__init__.py                            7      0   100%
modin/data_management/functions/binary_function.py                    21     14    33%
modin/data_management/functions/foldfunction.py                        6      1    83%
modin/data_management/functions/function.py                            6      1    83%
modin/data_management/functions/groupby_function.py                   55     49    11%
modin/data_management/functions/mapfunction.py                         6      1    83%
modin/data_management/functions/mapreducefunction.py                   9      2    78%
modin/data_management/functions/reductionfunction.py                   6      1    83%
modin/data_management/utils.py                                        32     14    56%
modin/engines/__init__.py                                              0      0   100%
modin/engines/base/__init__.py                                         0      0   100%
modin/engines/base/frame/__init__.py                                   0      0   100%
modin/engines/base/frame/axis_partition.py                            45     31    31%
modin/engines/base/frame/data.py                                     491    253    48%
modin/engines/base/frame/partition.py                                  1      0   100%
modin/engines/base/frame/partition_manager.py                        159     77    52%
modin/engines/base/io/__init__.py                                     12      0   100%
modin/engines/base/io/column_stores/__init__.py                        0      0   100%
modin/engines/base/io/column_stores/column_store_reader.py            40      0   100%
modin/engines/base/io/column_stores/feather_reader.py                  9      0   100%
modin/engines/base/io/column_stores/hdf_reader.py                      3      0   100%
modin/engines/base/io/column_stores/parquet_reader.py                 34      1    97%
modin/engines/base/io/file_reader.py                                  85      7    92%
modin/engines/base/io/io.py                                          110     45    59%
modin/engines/base/io/sql/__init__.py                                  0      0   100%
modin/engines/base/io/sql/sql_reader.py                               39      1    97%
modin/engines/base/io/text/__init__.py                                 0      0   100%
modin/engines/base/io/text/csv_reader.py                             112      4    96%
modin/engines/base/io/text/excel_reader.py                           106      9    92%
modin/engines/base/io/text/fwf_reader.py                             115     16    86%
modin/engines/base/io/text/json_reader.py                             50      2    96%
modin/engines/base/io/text/text_file_reader.py                        34      1    97%
modin/engines/base/series/__init__.py                                  0      0   100%
modin/engines/dask/__init__.py                                         0      0   100%
modin/engines/dask/pandas_on_dask/__init__.py                          0      0   100%
modin/engines/dask/pandas_on_dask/frame/__init__.py                    0      0   100%
modin/engines/dask/pandas_on_dask/frame/axis_partition.py             27     27     0%
modin/engines/dask/pandas_on_dask/frame/data.py                       15     15     0%
modin/engines/dask/pandas_on_dask/frame/partition.py                  75     75     0%
modin/engines/dask/pandas_on_dask/frame/partition_manager.py          44     44     0%
modin/engines/dask/pandas_on_dask/io.py                               17     17     0%
modin/engines/dask/pandas_on_dask/series/__init__.py                   0      0   100%
modin/engines/dask/task_wrapper.py                                     9      9     0%
modin/engines/python/__init__.py                                       0      0   100%
modin/engines/python/pandas_on_python/__init__.py                      0      0   100%
modin/engines/python/pandas_on_python/frame/__init__.py                0      0   100%
modin/engines/python/pandas_on_python/frame/axis_partition.py         14     14     0%
modin/engines/python/pandas_on_python/frame/data.py                    4      4     0%
modin/engines/python/pandas_on_python/frame/partition.py              65     65     0%
modin/engines/python/pandas_on_python/frame/partition_manager.py       7      7     0%
modin/engines/python/pandas_on_python/io.py                            6      6     0%
modin/engines/python/pandas_on_python/series/__init__.py               0      0   100%
modin/engines/ray/__init__.py                                          0      0   100%
modin/engines/ray/generic/__init__.py                                  0      0   100%
modin/engines/ray/generic/frame/__init__.py                            0      0   100%
modin/engines/ray/generic/frame/partition_manager.py                  10      5    50%
modin/engines/ray/generic/io.py                                       14      3    79%
modin/engines/ray/generic/series/__init__.py                           0      0   100%
modin/engines/ray/pandas_on_ray/__init__.py                            0      0   100%
modin/engines/ray/pandas_on_ray/frame/__init__.py                      0      0   100%
modin/engines/ray/pandas_on_ray/frame/axis_partition.py               22      1    95%
modin/engines/ray/pandas_on_ray/frame/data.py                         11      3    73%
modin/engines/ray/pandas_on_ray/frame/partition.py                    86     13    85%
modin/engines/ray/pandas_on_ray/frame/partition_manager.py            43     21    51%
modin/engines/ray/pandas_on_ray/io.py                                 18      0   100%
modin/engines/ray/pandas_on_ray/series/__init__.py                     0      0   100%
modin/engines/ray/task_wrapper.py                                      7      0   100%
modin/engines/ray/utils.py                                            52     16    69%
modin/error_message.py                                                22      4    82%
modin/experimental/__init__.py                                         0      0   100%
modin/experimental/cloud/__init__.py                                   6      6     0%
modin/experimental/cloud/base.py                                      36     36     0%
modin/experimental/cloud/cluster.py                                   90     90     0%
modin/experimental/cloud/connection.py                                98     98     0%
modin/experimental/cloud/rayscale.py                                 107    107     0%
modin/experimental/engines/__init__.py                                 0      0   100%
modin/experimental/engines/pandas_on_ray/__init__.py                   0      0   100%
modin/experimental/engines/pandas_on_ray/io_exp.py                    38     38     0%
modin/experimental/engines/pandas_on_ray/sql.py                       66     66     0%
modin/experimental/pandas/__init__.py                                  6      6     0%
modin/experimental/pandas/io_exp.py                                    7      7     0%
modin/pandas/__init__.py                                              38      3    92%
modin/pandas/base.py                                                1213    916    24%
modin/pandas/concat.py                                                58     48    17%
modin/pandas/dataframe.py                                            870    675    22%
modin/pandas/datetimes.py                                              7      3    57%
modin/pandas/general.py                                               53     35    34%
modin/pandas/groupby.py                                              294    204    31%
modin/pandas/indexing.py                                             209    209     0%
modin/pandas/io.py                                                   147     11    93%
modin/pandas/iterator.py                                              17     11    35%
modin/pandas/reshape.py                                               30     20    33%
modin/pandas/series.py                                               945    625    34%
modin/pandas/utils.py                                                 28      3    89%
--------------------------------------------------------------------------------------
TOTAL                                                               8201   4968    39%


= 85 passed, 7 skipped, 1 xfailed, 1 xpassed, 102 warnings in 60.04s (0:01:00) =
Closing remaining open files:test_write_pandas.hdf...donetest_write_modin.hdf...done
============================= test session starts ==============================
platform linux -- Python 3.7.7, pytest-5.4.3, py-1.8.1, pluggy-0.13.1
rootdir: /modin, inifile: setup.cfg
plugins: openfiles-0.5.0, remotedata-0.3.2, cov-2.10.0, custom-exit-code-0.3.0, forked-1.2.0, testmon-1.0.2, xdist-1.33.0
gw0 I / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 I / gw8 I / gw9 I / gw10 I / gw11 I / gw12 I / gw13 I / gw14 I / gw15 I / gw16 I / gw17 I / gw18 I / gw19 I / gw20 I / gw21 I / gw22 I / gw23 I / gw24 I / gw25 I / gw26 I / gw27 I / gw28 I / gw29 I / gw30 I / gw31 I / gw32 I / gw33 I / gw34 I / gw35 I / gw36 I / gw37 I / gw38 I / gw39 I / gw40 I / gw41 I / gw42 I / gw43 I / gw44 I / gw45 I / gw46 I / gw47 I
gw0 [19119] / gw1 [19119] / gw2 [19119] / gw3 [19119] / gw4 [19119] / gw5 [19119] / gw6 [19119] / gw7 [19119] / gw8 [19119] / gw9 [19119] / gw10 [19119] / gw11 [19119] / gw12 [19119] / gw13 [19119] / gw14 [19119] / gw15 [19119] / gw16 [19119] / gw17 [19119] / gw18 [19119] / gw19 [19119] / gw20 [19119] / gw21 [19119] / gw22 [19119] / gw23 [19119] / gw24 [19119] / gw25 [19119] / gw26 [19119] / gw27 [19119] / gw28 [19119] / gw29 [19119] / gw30 [19119] / gw31 [19119] / gw32 [19119] / gw33 [19119] / gw34 [19119] / gw35 [19119] / gw36 [19119] / gw37 [19119] / gw38 [19119] / gw39 [19119] / gw40 [19119] / gw41 [19119] / gw42 [19119] / gw43 [19119] / gw44 [19119] / gw45 [19119] / gw46 [19119] / gw47 [19119]

......................................................................... [  0%]
........................................................................ [  0%]
........................................................................ [  1%]
........................................................................ [  1%]
........................................................................ [  1%]
........................................................................ [  2%]
........................s............................................... [  2%]
........................................................................ [  3%]
.......................................................................s [  3%]
..................................................................x..... [  3%]
.......x.........s..x................x........X....X......X.XX....x..... [  4%]
XX.....X....x...............x.........X.....XX.....X.x.....X............ [  4%]
.....X.....X.Xx..XX..........x..X...XX..XX......X...Xx...x..x..X.X...X.. [  4%]
..X.....x....xxX.X....X..X....X.X..X..X..X..XX...X.XXX...XX..XX....X.XX. [  5%]
...X....X....XX...X.X..X..X.....XX.X.X....X...X.XX........X......X...XX. [  5%]
.X.....X.....X....X..X.....X...X....XX............X....X.........X.XX... [  6%]
..............X....X..X..........X..........x......X......XX..........x. [  6%]
......XX............X.xX........X....X.X........x....X......xX.X...X.... [  6%]
.....x...X..X..X....XX.....X..XX........X.....X.X..XX........X.x.X...XX. [  7%]
.X....X..X....xX...X.....X..X....X....X...XX..XX.........x...X.X.....XXX [  7%]
X..........X..X.Xx...X...XXx.X.XXX.XX.......XXXX.......XXX..X.x.X....X.. [  7%]
..XX.XX....XX....XX..X..XXX..X.......X...X..XXX...XX..XX........XX..X.X. [  8%]
........XX.XX...X....X........X.X...X..x...X....xXXX.X...........Xx..x.. [  8%]
.X...x.....XX..X.xX...X....Xx........XX.X...X.x...X.........XX......X... [  9%]
...X.X.......X......X.....X...........X.X........X...x......XX.....Xx... [  9%]
.........X.....X...X...X.X..X....X...XX....X.....X.....X..XX.......X.X.. [  9%]
..XX.......X..XX.X....X.....X...X....XXX.X....X...XX...X.....X.X........ [ 10%]
..XX..X...x.......X.....XX.......X...X.X......X................XXXX...X. [ 10%]
.X...X............X...XXXX..X...X.......X.XX..X.......X..........XX..X.X [ 10%]
X........X..X....X..x.X..XX..X....x..X....X...XX..xX............X......X [ 11%]
X........X..X..x...X......XX.XX............X..X.....X....X...x.....X.... [ 11%]
..XxX......x.....x....XX.X.........X........x.................X......X.. [ 12%]
.XX.....X..X...x....XxX.......x..X..X......X.X....XxX.X...X.X..X........ [ 12%]
...X...X.X...............X...X......X........X..........X.X...XXX...X... [ 12%]
...X...xX......X..X..........X.X........X....X..XXX........X...XX.X...X. [ 13%]
X.X.....XX....X.......XX.....XxX..X..................XX.X...X.x......X.. [ 13%]
.....X........X......X........x......X............X.....X..........X.... [ 13%]
.............X......X.......xX........X.x.............................x. [ 14%]
..................X....X..................Xx...x...X.................... [ 14%]
.........X..X.....................X.................x....x......X....... [ 15%]
X.......Xx..........x..x........X.........X..............X....x.......X. [ 15%]
..Xx....X.............X.x..XxX......................X...X...xX.........X [ 15%]
...X..........x...X.X....X....X.....x........XX...X..x..X.......X..X..X. [ 16%]
......................X...............X..x......X..........X............ [ 16%]
...X..............X........................X............................ [ 16%]
.X..X..............s......X.................x...........X................ [ 17%]
..X.......X.......................................X..................... [ 17%]
...X...........................X........................................ [ 18%]
....................................................................x... [ 18%]
....................................s................................... [ 18%]
........................................................................ [ 19%]
........................................................................ [ 19%]
........................................................................ [ 19%]
........................................................................ [ 20%]
........................................................................ [ 20%]
........................................................................ [ 21%]
........................................................................ [ 21%]
........................................................................ [ 21%]
......................................................................... [ 22%]
...........................................................x............ [ 22%]
........................................................................ [ 22%]
........................................................................ [ 23%]
........................................................................ [ 23%]
........................................................................ [ 24%]
........................................................................ [ 24%]
........................................................................ [ 24%]
........................................................................ [ 25%]
........................................................................ [ 25%]
..........................................x....X...XX.....X.x..X.x..X... [ 25%]
...XX..X..X..X.....XX..X.X..............x..X........X.............xX...X [ 26%]
.X...X.X....X..X.....X................................................... [ 26%]
........................................................................ [ 27%]
..x..............................X...................................... [ 27%]
......X..x..x......x............x.............X.....XXXX........X....... [ 27%]
.......................X.X.........xXx.....x.................XX.......x. [ 28%]
.....X..XX....XX..X..X.....X.............................X.............. [ 28%]
..............................X.......X..........X........................ [ 29%]
......................................................................... [ 29%]
.............x........................................................... [ 29%]
........................................................................ [ 30%]
.......................................................................... [ 30%]
........................................................................ [ 30%]
........................................................................ [ 31%]
..........X.............X............X..............X.........X....X..... [ 31%]
........................................................................ [ 32%]
........................................................................ [ 32%]
......................................................................... [ 32%]
........................................................................ [ 33%]
........................................................................ [ 33%]
.......................s................................................ [ 33%]
........................................................................ [ 34%]
......................................................................... [ 34%]
........................................................................ [ 35%]
........................................................................ [ 35%]
........................................................................ [ 35%]
........................................................................ [ 36%]
........................................................................ [ 36%]
......................................................................... [ 36%]
........................................................................ [ 37%]
...............X........................................................ [ 37%]
........................................................................ [ 38%]
........................................................................ [ 38%]
........................................................................ [ 38%]
........................................................................ [ 39%]
........................................................................ [ 39%]
........................................................................ [ 39%]
........................................................................ [ 40%]
........................................................................ [ 40%]
........................................................................ [ 41%]
........................................................................ [ 41%]
........................................................................ [ 41%]
........................................................................ [ 42%]
........................................................................ [ 42%]
........................................................................ [ 43%]
........................................................................ [ 43%]
........................................................................ [ 43%]
........................................................................ [ 44%]
........................................................................ [ 44%]
........................................................................ [ 44%]
........................................................................ [ 45%]
........................................................................ [ 45%]
........................................................................ [ 46%]
........................................................................ [ 46%]
........................................................................ [ 46%]
........................................................................ [ 47%]
........................................................................ [ 47%]
........................................................................ [ 47%]
........................................................................ [ 48%]
........................................................................ [ 48%]
......................................................................... [ 49%]
........................................................................ [ 49%]
........................................................................ [ 49%]
......................................................................... [ 50%]
........................................................................ [ 50%]
........................................................................ [ 50%]
........................................................................ [ 51%]
........................................................................ [ 51%]
........................................................................ [ 52%]
........................................................................ [ 52%]
........................................................................ [ 52%]
......................................................................... [ 53%]
........................................................................ [ 53%]
........................................................................ [ 53%]
........................................................................ [ 54%]
........................................................................ [ 54%]
......................................................................... [ 55%]
........................................................................ [ 55%]
........................................................................ [ 55%]
........................................................................ [ 56%]
........................................................................ [ 56%]
........................................................................ [ 56%]
........................................................................ [ 57%]
........................................................................ [ 57%]
........................................................................ [ 58%]
........................................................................ [ 58%]
........................................................................ [ 58%]
........................................................................ [ 59%]
........................................................................ [ 59%]
........................................................................ [ 59%]
........................................................................ [ 60%]
........................................................................ [ 60%]
......................................................................... [ 61%]
........................................................................ [ 61%]
........................................................................ [ 61%]
........................................................................ [ 62%]
........................................................................ [ 62%]
......................................................................... [ 62%]
........................................................................ [ 63%]
........................................................................ [ 63%]
........................................................................ [ 64%]
........................................................................ [ 64%]
........................................................................ [ 64%]
........................................................................ [ 65%]
........................................................................ [ 65%]
........................................................................ [ 66%]
........................................................................ [ 66%]
........................................................................ [ 66%]
........................................................................ [ 67%]
........................................................................ [ 67%]
........................................................................ [ 67%]
........................................................................ [ 68%]
........................................................................ [ 68%]
........................................................................ [ 69%]
........................................................................ [ 69%]
........................................................................ [ 69%]
........................................................................ [ 70%]
......................................................................... [ 70%]
......................................................................... [ 70%]
........................................................................ [ 71%]
........................................................................ [ 71%]
........................................................................ [ 72%]
........................................................................ [ 72%]
........................................................................ [ 72%]
........................................................................ [ 73%]
........................................................................ [ 73%]
........................................................................ [ 73%]
........................................................................ [ 74%]
........................................................................ [ 74%]
........................................................................ [ 75%]
........................................................................ [ 75%]
........................................................................ [ 75%]
........................................................................ [ 76%]
........................................................................ [ 76%]
........................................................................ [ 76%]
........................................................................ [ 77%]
........................................................................ [ 77%]
........................................................................ [ 78%]
........................................................................ [ 78%]
........................................................................ [ 78%]
........................................................................ [ 79%]
........................................................................ [ 79%]
........................................................................ [ 79%]
........................................................................ [ 80%]
........................................................................ [ 80%]
........................................................................ [ 81%]
........................................................................ [ 81%]
........................................................................ [ 81%]
......................................................................... [ 82%]
........................................................................ [ 82%]
........................................................................ [ 82%]
........................................................................ [ 83%]
......................................................................... [ 83%]
........................................................................ [ 84%]
........................................................................ [ 84%]
........................................................................ [ 84%]
........................................................................ [ 85%]
........................................................................ [ 85%]
........................................................................ [ 85%]
........................................................................ [ 86%]
........................................................................ [ 86%]
........................................................................ [ 87%]
........................................................................ [ 87%]
........................................................................ [ 87%]
........................................................................ [ 88%]
........................................................................ [ 88%]
........................................................................ [ 89%]
........................................................................ [ 89%]
........................................................................ [ 89%]
........................................................................ [ 90%]
......................................................................... [ 90%]
ssss..................................................................X.. [ 90%]
......X.......x..........X.....x........X............x............x..... [ 91%]
..s.............ss...................................................... [ 91%]
........................................................................ [ 92%]
........................................................................ [ 92%]
........................................................................ [ 92%]
........................................................................ [ 93%]
........................................................................ [ 93%]
........................................................................ [ 93%]
........................................................................ [ 94%]
........................................................................ [ 94%]
........................................................................ [ 95%]
........................................................................ [ 95%]
......................................................................... [ 95%]
.......................xxx...x.xxx......x..........x......x.....xx..x.... [ 96%]
.....................x...x.............................................. [ 96%]
........x............................................................... [ 96%]
........................................................................ [ 97%]
........................................................................ [ 97%]
............................ssssssssssssssssss.......................... [ 98%]
........................................................................ [ 98%]
........................................................................ [ 98%]
........................................................................ [ 99%]
........................................................................ [ 99%]
........................................................................ [ 99%]
...........                                                              [100%]

----------- coverage: platform linux, python 3.7.7-final-0 -----------
Name                                                               Stmts   Miss  Cover
--------------------------------------------------------------------------------------
modin/__init__.py                                                     76     38    50%
modin/_version.py                                                    272    172    37%
modin/apply_license_header.py                                         19     19     0%
modin/backends/__init__.py                                             0      0   100%
modin/backends/base/__init__.py                                        0      0   100%
modin/backends/base/query_compiler.py                                129      0   100%
modin/backends/pandas/__init__.py                                      0      0   100%
modin/backends/pandas/parsers.py                                     207    119    43%
modin/backends/pandas/query_compiler.py                              811    153    81%
modin/data_management/__init__.py                                      0      0   100%
modin/data_management/dispatcher.py                                   78     16    79%
modin/data_management/factories.py                                    85     26    69%
modin/data_management/functions/__init__.py                            7      0   100%
modin/data_management/functions/binary_function.py                    21      0   100%
modin/data_management/functions/foldfunction.py                        6      0   100%
modin/data_management/functions/function.py                            6      1    83%
modin/data_management/functions/groupby_function.py                   55     40    27%
modin/data_management/functions/mapfunction.py                         6      0   100%
modin/data_management/functions/mapreducefunction.py                   9      0   100%
modin/data_management/functions/reductionfunction.py                   6      0   100%
modin/data_management/utils.py                                        32     14    56%
modin/engines/__init__.py                                              0      0   100%
modin/engines/base/__init__.py                                         0      0   100%
modin/engines/base/frame/__init__.py                                   0      0   100%
modin/engines/base/frame/axis_partition.py                            45     30    33%
modin/engines/base/frame/data.py                                     491     36    93%
modin/engines/base/frame/partition.py                                  1      0   100%
modin/engines/base/frame/partition_manager.py                        159     37    77%
modin/engines/base/io/__init__.py                                     12      0   100%
modin/engines/base/io/column_stores/__init__.py                        0      0   100%
modin/engines/base/io/column_stores/column_store_reader.py            40      0   100%
modin/engines/base/io/column_stores/feather_reader.py                  9      0   100%
modin/engines/base/io/column_stores/hdf_reader.py                      3      0   100%
modin/engines/base/io/column_stores/parquet_reader.py                 34      1    97%
modin/engines/base/io/file_reader.py                                  85      7    92%
modin/engines/base/io/io.py                                          110     45    59%
modin/engines/base/io/sql/__init__.py                                  0      0   100%
modin/engines/base/io/sql/sql_reader.py                               39      1    97%
modin/engines/base/io/text/__init__.py                                 0      0   100%
modin/engines/base/io/text/csv_reader.py                             112      2    98%
modin/engines/base/io/text/excel_reader.py                           106      9    92%
modin/engines/base/io/text/fwf_reader.py                             115     16    86%
modin/engines/base/io/text/json_reader.py                             50      2    96%
modin/engines/base/io/text/text_file_reader.py                        34      1    97%
modin/engines/base/series/__init__.py                                  0      0   100%
modin/engines/dask/__init__.py                                         0      0   100%
modin/engines/dask/pandas_on_dask/__init__.py                          0      0   100%
modin/engines/dask/pandas_on_dask/frame/__init__.py                    0      0   100%
modin/engines/dask/pandas_on_dask/frame/axis_partition.py             27     27     0%
modin/engines/dask/pandas_on_dask/frame/data.py                       15     15     0%
modin/engines/dask/pandas_on_dask/frame/partition.py                  75     75     0%
modin/engines/dask/pandas_on_dask/frame/partition_manager.py          44     44     0%
modin/engines/dask/pandas_on_dask/io.py                               17     17     0%
modin/engines/dask/pandas_on_dask/series/__init__.py                   0      0   100%
modin/engines/dask/task_wrapper.py                                     9      9     0%
modin/engines/python/__init__.py                                       0      0   100%
modin/engines/python/pandas_on_python/__init__.py                      0      0   100%
modin/engines/python/pandas_on_python/frame/__init__.py                0      0   100%
modin/engines/python/pandas_on_python/frame/axis_partition.py         14     14     0%
modin/engines/python/pandas_on_python/frame/data.py                    4      4     0%
modin/engines/python/pandas_on_python/frame/partition.py              65     65     0%
modin/engines/python/pandas_on_python/frame/partition_manager.py       7      7     0%
modin/engines/python/pandas_on_python/io.py                            6      6     0%
modin/engines/python/pandas_on_python/series/__init__.py               0      0   100%
modin/engines/ray/__init__.py                                          0      0   100%
modin/engines/ray/generic/__init__.py                                  0      0   100%
modin/engines/ray/generic/frame/__init__.py                            0      0   100%
modin/engines/ray/generic/frame/partition_manager.py                  10      0   100%
modin/engines/ray/generic/io.py                                       14      3    79%
modin/engines/ray/generic/series/__init__.py                           0      0   100%
modin/engines/ray/pandas_on_ray/__init__.py                            0      0   100%
modin/engines/ray/pandas_on_ray/frame/__init__.py                      0      0   100%
modin/engines/ray/pandas_on_ray/frame/axis_partition.py               22      0   100%
modin/engines/ray/pandas_on_ray/frame/data.py                         11      3    73%
modin/engines/ray/pandas_on_ray/frame/partition.py                    86      7    92%
modin/engines/ray/pandas_on_ray/frame/partition_manager.py            43     16    63%
modin/engines/ray/pandas_on_ray/io.py                                 18      0   100%
modin/engines/ray/pandas_on_ray/series/__init__.py                     0      0   100%
modin/engines/ray/task_wrapper.py                                      7      0   100%
modin/engines/ray/utils.py                                            52      9    83%
modin/error_message.py                                                22      2    91%
modin/experimental/__init__.py                                         0      0   100%
modin/experimental/cloud/__init__.py                                   6      6     0%
modin/experimental/cloud/base.py                                      36     36     0%
modin/experimental/cloud/cluster.py                                   90     90     0%
modin/experimental/cloud/connection.py                                98     98     0%
modin/experimental/cloud/rayscale.py                                 107    107     0%
modin/experimental/engines/__init__.py                                 0      0   100%
modin/experimental/engines/pandas_on_ray/__init__.py                   0      0   100%
modin/experimental/engines/pandas_on_ray/io_exp.py                    38     38     0%
modin/experimental/engines/pandas_on_ray/sql.py                       66     66     0%
modin/experimental/pandas/__init__.py                                  6      6     0%
modin/experimental/pandas/io_exp.py                                    7      7     0%
modin/pandas/__init__.py                                              38      3    92%
modin/pandas/base.py                                                1213     52    96%
modin/pandas/concat.py                                                58      5    91%
modin/pandas/dataframe.py                                            870     95    89%
modin/pandas/datetimes.py                                              7      0   100%
modin/pandas/general.py                                               53      3    94%
modin/pandas/groupby.py                                              294     38    87%
modin/pandas/indexing.py                                             209     32    85%
modin/pandas/io.py                                                   147     11    93%
modin/pandas/iterator.py                                              17      0   100%
modin/pandas/reshape.py                                               30      0   100%
modin/pandas/series.py                                               945     80    92%
modin/pandas/utils.py                                                 28      3    89%
--------------------------------------------------------------------------------------
TOTAL                                                               8201   1884    77%

= 18460 passed, 31 skipped, 113 xfailed, 515 xpassed, 33026 warnings in 982.10s (0:16:22) =

TOTAL                                                               8201   1884    77%

= 18460 passed, 31 skipped, 113 xfailed, 515 xpassed, 33026 warnings in 982.10s (0:16:22) =

```

</details>

modin-bot: <h1 align="center"><img width=7% alt="" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Teamcity_Logo.png/600px-Teamcity_Logo.png">
    TeamCity Dask test results bot</h1>

<h3 align="center">Tests PASSed</h3>

<details><summary>Tests Logs</summary>


```
============================= test session starts ==============================
platform linux -- Python 3.7.7, pytest-5.4.3, py-1.8.1, pluggy-0.13.1
rootdir: /modin, inifile: setup.cfg
plugins: openfiles-0.5.0, remotedata-0.3.2, cov-2.10.0, custom-exit-code-0.3.0, forked-1.2.0, testmon-1.0.2, xdist-1.33.0
collected 94 items

modin/pandas/test/test_io.py .................sx..........s............. [ 45%]
...................s..s.X.....s.................ss.                      [100%]

----------- coverage: platform linux, python 3.7.7-final-0 -----------
Name                                                               Stmts   Miss  Cover
--------------------------------------------------------------------------------------
modin/__init__.py                                                     76     38    50%
modin/_version.py                                                    272    172    37%
modin/apply_license_header.py                                         19     19     0%
modin/backends/__init__.py                                             0      0   100%
modin/backends/base/__init__.py                                        0      0   100%
modin/backends/base/query_compiler.py                                129      1    99%
modin/backends/pandas/__init__.py                                      0      0   100%
modin/backends/pandas/parsers.py                                     207    125    40%
modin/backends/pandas/query_compiler.py                              811    482    41%
modin/data_management/__init__.py                                      0      0   100%
modin/data_management/dispatcher.py                                   78     16    79%
modin/data_management/factories.py                                    85     26    69%
modin/data_management/functions/__init__.py                            7      0   100%
modin/data_management/functions/binary_function.py                    21     14    33%
modin/data_management/functions/foldfunction.py                        6      1    83%
modin/data_management/functions/function.py                            6      1    83%
modin/data_management/functions/groupby_function.py                   55     49    11%
modin/data_management/functions/mapfunction.py                         6      1    83%
modin/data_management/functions/mapreducefunction.py                   9      2    78%
modin/data_management/functions/reductionfunction.py                   6      1    83%
modin/data_management/utils.py                                        32     14    56%
modin/engines/__init__.py                                              0      0   100%
modin/engines/base/__init__.py                                         0      0   100%
modin/engines/base/frame/__init__.py                                   0      0   100%
modin/engines/base/frame/axis_partition.py                            45     31    31%
modin/engines/base/frame/data.py                                     491    270    45%
modin/engines/base/frame/partition.py                                  1      0   100%
modin/engines/base/frame/partition_manager.py                        159     80    50%
modin/engines/base/io/__init__.py                                     12      0   100%
modin/engines/base/io/column_stores/__init__.py                        0      0   100%
modin/engines/base/io/column_stores/column_store_reader.py            40      0   100%
modin/engines/base/io/column_stores/feather_reader.py                  9      0   100%
modin/engines/base/io/column_stores/hdf_reader.py                      3      0   100%
modin/engines/base/io/column_stores/parquet_reader.py                 34      1    97%
modin/engines/base/io/file_reader.py                                  85      7    92%
modin/engines/base/io/io.py                                          110     34    69%
modin/engines/base/io/sql/__init__.py                                  0      0   100%
modin/engines/base/io/sql/sql_reader.py                               39      1    97%
modin/engines/base/io/text/__init__.py                                 0      0   100%
modin/engines/base/io/text/csv_reader.py                             112      4    96%
modin/engines/base/io/text/excel_reader.py                           106      9    92%
modin/engines/base/io/text/fwf_reader.py                             115    108     6%
modin/engines/base/io/text/json_reader.py                             50      2    96%
modin/engines/base/io/text/text_file_reader.py                        34      1    97%
modin/engines/base/series/__init__.py                                  0      0   100%
modin/engines/dask/__init__.py                                         0      0   100%
modin/engines/dask/pandas_on_dask/__init__.py                          0      0   100%
modin/engines/dask/pandas_on_dask/frame/__init__.py                    0      0   100%
modin/engines/dask/pandas_on_dask/frame/axis_partition.py             27      5    81%
modin/engines/dask/pandas_on_dask/frame/data.py                       15      0   100%
modin/engines/dask/pandas_on_dask/frame/partition.py                  75     21    72%
modin/engines/dask/pandas_on_dask/frame/partition_manager.py          44     23    48%
modin/engines/dask/pandas_on_dask/io.py                               17      0   100%
modin/engines/dask/pandas_on_dask/series/__init__.py                   0      0   100%
modin/engines/dask/task_wrapper.py                                     9      0   100%
modin/engines/python/__init__.py                                       0      0   100%
modin/engines/python/pandas_on_python/__init__.py                      0      0   100%
modin/engines/python/pandas_on_python/frame/__init__.py                0      0   100%
modin/engines/python/pandas_on_python/frame/axis_partition.py         14     14     0%
modin/engines/python/pandas_on_python/frame/data.py                    4      4     0%
modin/engines/python/pandas_on_python/frame/partition.py              65     65     0%
modin/engines/python/pandas_on_python/frame/partition_manager.py       7      7     0%
modin/engines/python/pandas_on_python/io.py                            6      6     0%
modin/engines/python/pandas_on_python/series/__init__.py               0      0   100%
modin/engines/ray/__init__.py                                          0      0   100%
modin/engines/ray/generic/__init__.py                                  0      0   100%
modin/engines/ray/generic/frame/__init__.py                            0      0   100%
modin/engines/ray/generic/frame/partition_manager.py                  10     10     0%
modin/engines/ray/generic/io.py                                       14     14     0%
modin/engines/ray/generic/series/__init__.py                           0      0   100%
modin/engines/ray/pandas_on_ray/__init__.py                            0      0   100%
modin/engines/ray/pandas_on_ray/frame/__init__.py                      0      0   100%
modin/engines/ray/pandas_on_ray/frame/axis_partition.py               22     22     0%
modin/engines/ray/pandas_on_ray/frame/data.py                         11     11     0%
modin/engines/ray/pandas_on_ray/frame/partition.py                    86     86     0%
modin/engines/ray/pandas_on_ray/frame/partition_manager.py            43     43     0%
modin/engines/ray/pandas_on_ray/io.py                                 18     18     0%
modin/engines/ray/pandas_on_ray/series/__init__.py                     0      0   100%
modin/engines/ray/task_wrapper.py                                      7      7     0%
modin/engines/ray/utils.py                                            52     52     0%
modin/error_message.py                                                22      4    82%
modin/experimental/__init__.py                                         0      0   100%
modin/experimental/cloud/__init__.py                                   6      6     0%
modin/experimental/cloud/base.py                                      36     36     0%
modin/experimental/cloud/cluster.py                                   90     90     0%
modin/experimental/cloud/connection.py                                98     98     0%
modin/experimental/cloud/rayscale.py                                 107    107     0%
modin/experimental/engines/__init__.py                                 0      0   100%
modin/experimental/engines/pandas_on_ray/__init__.py                   0      0   100%
modin/experimental/engines/pandas_on_ray/io_exp.py                    38     38     0%
modin/experimental/engines/pandas_on_ray/sql.py                       66     66     0%
modin/experimental/pandas/__init__.py                                  6      6     0%
modin/experimental/pandas/io_exp.py                                    7      7     0%
modin/pandas/__init__.py                                              38      8    79%
modin/pandas/base.py                                                1213    916    24%
modin/pandas/concat.py                                                58     48    17%
modin/pandas/dataframe.py                                            870    675    22%
modin/pandas/datetimes.py                                              7      3    57%
modin/pandas/general.py                                               53     35    34%
modin/pandas/groupby.py                                              294    204    31%
modin/pandas/indexing.py                                             209    209     0%
modin/pandas/io.py                                                   147     11    93%
modin/pandas/iterator.py                                              17     11    35%
modin/pandas/reshape.py                                               30     20    33%
modin/pandas/series.py                                               945    625    34%
modin/pandas/utils.py                                                 28      3    89%
--------------------------------------------------------------------------------------
TOTAL                                                               8201   5144    37%


= 85 passed, 7 skipped, 1 xfailed, 1 xpassed, 114 warnings in 65.17s (0:01:05) =
Closing remaining open files:test_write_pandas.hdf...donetest_write_modin.hdf...done
============================= test session starts ==============================
platform linux -- Python 3.7.7, pytest-5.4.3, py-1.8.1, pluggy-0.13.1
rootdir: /modin, inifile: setup.cfg
plugins: openfiles-0.5.0, remotedata-0.3.2, cov-2.10.0, custom-exit-code-0.3.0, forked-1.2.0, testmon-1.0.2, xdist-1.33.0
gw0 I / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 I / gw8 I / gw9 I / gw10 I / gw11 I / gw12 I / gw13 I / gw14 I / gw15 I / gw16 I / gw17 I / gw18 I / gw19 I / gw20 I / gw21 I / gw22 I / gw23 I / gw24 I / gw25 I / gw26 I / gw27 I / gw28 I / gw29 I / gw30 I / gw31 I / gw32 I / gw33 I / gw34 I / gw35 I / gw36 I / gw37 I / gw38 I / gw39 I / gw40 I / gw41 I / gw42 I / gw43 I / gw44 I / gw45 I / gw46 I / gw47 I
gw0 [19119] / gw1 [19119] / gw2 [19119] / gw3 [19119] / gw4 [19119] / gw5 [19119] / gw6 [19119] / gw7 [19119] / gw8 [19119] / gw9 [19119] / gw10 [19119] / gw11 [19119] / gw12 [19119] / gw13 [19119] / gw14 [19119] / gw15 [19119] / gw16 [19119] / gw17 [19119] / gw18 [19119] / gw19 [19119] / gw20 [19119] / gw21 [19119] / gw22 [19119] / gw23 [19119] / gw24 [19119] / gw25 [19119] / gw26 [19119] / gw27 [19119] / gw28 [19119] / gw29 [19119] / gw30 [19119] / gw31 [19119] / gw32 [19119] / gw33 [19119] / gw34 [19119] / gw35 [19119] / gw36 [19119] / gw37 [19119] / gw38 [19119] / gw39 [19119] / gw40 [19119] / gw41 [19119] / gw42 [19119] / gw43 [19119] / gw44 [19119] / gw45 [19119] / gw46 [19119] / gw47 [19119]

........................................................................ [  0%]
........................................................................ [  0%]
........................................................................ [  1%]
........................................................................ [  1%]
.....................s................................................... [  1%]
........................................................................ [  2%]
......................................................................... [  2%]
........................................................................ [  3%]
........................................................................ [  3%]
......................................s....................x............ [  3%]
.....x...........................................X.....................x [  4%]
..x....X..........X...Xs...x.XxX....X..X.XX..XX..X...X..X.....X..X....X. [  4%]
..X...X..XX........x....x...X............x........x..X...........Xx.XX.. [  4%]
....X....X....Xx....X.X....Xxx..X.X.X..X..XX.X.Xx.X...XXXXXxX.X.X...XX.X [  5%]
...X....XXX.X......X..X....X.X......X..............X....X...........X..X [  5%]
........XX...X.......X.........X...X..X...X......X.X...X...X...XX.X..... [  6%]
..X..X.XX...XXX.....X........X......XXX.X.......X.......XX.........X.X... [  6%]
XX..X...X........................X...............X....X........X....X... [  6%]
..X..............X....X...XxXX.....X.X...X.X.X.XX..X....X.X.X....X..X... [  7%]
.......................X.....X......X.......X.....X......X.............. [  7%]
..........X........XX......XXX....XXX....XXX......XXX...X.X...Xx........ [  7%]
......x.......X.....xx..XX.......XX......x.X..X.X...XX.X...x.X.X..X...XX [  8%]
.x......X...X...X.x............x.X.X...XX.....X.....XX...X.XX...X..X.....X. [  8%]
...X.X....XX....XX..XX.XX...XX.XX.XX.X.XXX..XX.X...XX....X......X.X..... [  9%]
.......X..XX....X.............x.X..X..x.........X..Xx...X...x...X..X.x..x [  9%]
XX...XxXX....xXX.X.XxX.XXXx....X...XX....XX...xXx....X............X..... [  9%]
.........X...X...XX.X..........X.....XXXX..XXXX.X.XX....X...XX.XX....X.. [ 10%]
...........X....X...X....XX......X.......X.X....X........................ [ 10%]
..............................................X....X.........X.....X.X.. [ 10%]
...X..........x.............................X........................... [ 11%]
...X..............x......x.......X..X..XxxX.......XX....X.....Xx....X... [ 11%]
.X...x....X.....Xx......................X..X...XX.X.X.X..x...X....X....X [ 12%]
...X....XX.XXx..X..XX.XX......X...X..X.X....XX...XX.XX...X.......XX.X... [ 12%]
.XX....X...xX......XX...X...X..XX......XX.....X........X.X.X............ [ 12%]
....x...........X.X......X..X...x..XX.X......XXxX......XX.X.....XXX..... [ 13%]
......XX........XxX.X......X....X...X.....XX.X...X..x.Xx..X.X..X....X.XX [ 13%]
......X...X..X.....X...X....x.X..x...........X..x.....X..X........Xx...X. [ 13%]
....X.XXX....X.....X.........X.X...............X.x..........Xx.......... [ 14%]
...X....XXXX..x....XX.....x..X..xX....X....X........XX....x.........X.X. [ 14%]
..........X..X.X...X.................X.........X..X......X............... [ 15%]
......XX.....X.............X.....X..............XX...X.....x............ [ 15%]
.........X......................X......X...X...........X.......X....X... [ 15%]
.........X............X...........................x................x.x.. [ 16%]
.....................x.................................................. [ 16%]
................X..X...........x......................X................. [ 16%]
.x..............................................X.........X............. [ 17%]
...s........X................x.......................X......X........... [ 17%]
............X..x..XX.......................X......XX.................... [ 18%]
..................x...X..........X.......x..........x................... [ 18%]
..............X.......X.......X.........x.......x...........x.....X..... [ 18%]
......X.........X....X............x.......X...X....X....x.........x...X.. [ 19%]
....x..X.......x.X.......X.....X.....X....xx....XX..........X............ [ 19%]
....X........X........XXX..X...X.........X..X...X.X.............X.......X [ 20%]
..X............X.........XX.......X.X......X..................X......... [ 20%]
.X.............X.......X..............X.......X.......X................. [ 20%]
........................................................................ [ 21%]
..........................................s............................. [ 21%]
........................................................................ [ 21%]
........................................................................ [ 22%]
........................................................................ [ 22%]
........................................................................ [ 23%]
........................................................................ [ 23%]
.............................................................s.......... [ 23%]
........................................................................ [ 24%]
......................................x................................. [ 24%]
........................................................................ [ 24%]
........................................................................ [ 25%]
........................................................................ [ 25%]
........................................................................ [ 26%]
.............................................x.......................... [ 26%]
........................................................................ [ 26%]
.....x....................................x............................. [ 27%]
...................................x.................................... [ 27%]
........................................................................ [ 27%]
........................................................................ [ 28%]
......x.................X............................................... [ 28%]
........................................................................ [ 29%]
........................................................................ [ 29%]
......................................................................... [ 29%]
........................................................................ [ 30%]
........................................................................ [ 30%]
......................................................................... [ 30%]
........................................................................ [ 31%]
........................................................................ [ 31%]
........................................................................ [ 32%]
........................................................................ [ 32%]
........................................................................ [ 32%]
..........................................................ss.s.ss..ss.ss [ 33%]
ss...sssssss............................................................ [ 33%]
......................................................................... [ 33%]
........................................................................ [ 34%]
........................................................................ [ 34%]
........................................................................ [ 35%]
......................................................................... [ 35%]
........................................................................ [ 35%]
......................................................................... [ 36%]
........................................................................ [ 36%]
........................................................................ [ 36%]
...............................................................X......X. [ 37%]
...........X......X...................X..............X................... [ 37%]
........................................................................ [ 38%]
........................................................................ [ 38%]
........................................................................ [ 38%]
........................................................................ [ 39%]
........................................................................ [ 39%]
........................................................................ [ 40%]
........................................................................ [ 40%]
........................................................................ [ 40%]
........................................................................ [ 41%]
........................................................................ [ 41%]
........................................................................ [ 41%]
........................................................................ [ 42%]
........................................................................ [ 42%]
........................................................................ [ 43%]
........................................................................ [ 43%]
........................................................................ [ 43%]
........................................................................ [ 44%]
.......................................................................... [ 44%]
........................................................................ [ 44%]
........................................................................ [ 45%]
........................................................................ [ 45%]
........................................................................ [ 46%]
........................................................................ [ 46%]
........................................................................ [ 46%]
........................................................................ [ 47%]
........................................................................ [ 47%]
........................................................................ [ 47%]
........................................................................ [ 48%]
........................................................................ [ 48%]
........................................................................ [ 49%]
........................................................................ [ 49%]
........................................................................ [ 49%]
........................................................................ [ 50%]
........................................................................ [ 50%]
........................................................................ [ 50%]
........................................................................ [ 51%]
........................................................................ [ 51%]
........................................................................ [ 52%]
........................................................................ [ 52%]
........................................................................ [ 52%]
........................................................................ [ 53%]
........................................................................ [ 53%]
........................................................................ [ 53%]
........................................................................ [ 54%]
........................................................................ [ 54%]
........................................................................ [ 55%]
........................................................................ [ 55%]
........................................................................ [ 55%]
........................................................................ [ 56%]
........................................................................ [ 56%]
........................................................................ [ 56%]
........................................................................ [ 57%]
........................................................................ [ 57%]
........................................................................ [ 58%]
........................................................................ [ 58%]
........................................................................ [ 58%]
........................................................................ [ 59%]
........................................................................ [ 59%]
........................................................................ [ 59%]
........................................................................ [ 60%]
........................................................................ [ 60%]
........................................................................ [ 61%]
......................................................................... [ 61%]
........................................................................ [ 61%]
......................................................................... [ 62%]
........................................................................ [ 62%]
........................................................................ [ 63%]
........................................................................ [ 63%]
........................................................................ [ 63%]
........................................................................ [ 64%]
........................................................................ [ 64%]
........................................................................ [ 64%]
........................................................................ [ 65%]
........................................................................ [ 65%]
........................................................................ [ 66%]
........................................................................ [ 66%]
........................................................................ [ 66%]
........................................................................ [ 67%]
........................................................................ [ 67%]
........................................................................ [ 67%]
........................................................................ [ 68%]
........................................................................ [ 68%]
......................................................................... [ 69%]
........................................................................ [ 69%]
........................................................................ [ 69%]
........................................................................ [ 70%]
........................................................................ [ 70%]
........................................................................ [ 70%]
........................................................................ [ 71%]
........................................................................ [ 71%]
........................................................................ [ 72%]
........................................................................ [ 72%]
........................................................................ [ 72%]
........................................................................ [ 73%]
........................................................................ [ 73%]
......................................................................... [ 73%]
........................................................................ [ 74%]
......................................................................... [ 74%]
........................................................................ [ 75%]
........................................................................ [ 75%]
........................................................................ [ 75%]
........................................................................ [ 76%]
........................................................................ [ 76%]
........................................................................ [ 76%]
........................................................................ [ 77%]
........................................................................ [ 77%]
........................................................................ [ 78%]
........................................................................ [ 78%]
........................................................................ [ 78%]
........................................................................ [ 79%]
........................................................................ [ 79%]
........................................................................ [ 79%]
........................................................................ [ 80%]
........................................................................ [ 80%]
........................................................................ [ 81%]
........................................................................ [ 81%]
........................................................................ [ 81%]
........................................................................ [ 82%]
........................................................................ [ 82%]
........................................................................ [ 82%]
........................................................................ [ 83%]
........................................................................ [ 83%]
........................................................................ [ 84%]
........................................................................ [ 84%]
......................................................................... [ 84%]
........................................................................ [ 85%]
........................................................................ [ 85%]
........................................................................ [ 86%]
........................................................................ [ 86%]
........................................................................ [ 86%]
........................................................................ [ 87%]
........................................................................ [ 87%]
........................................................................ [ 87%]
........................................................................ [ 88%]
........................................................................ [ 88%]
........................................................................ [ 89%]
......................................................................... [ 89%]
........................................................................ [ 89%]
........................................................................ [ 90%]
........................................................................ [ 90%]
.......................................................................s [ 90%]
s.ss.................................................................... [ 91%]
............................................................X........x.. [ 91%]
.X..................xs...x...x..X....................................... [ 92%]
....................................................s.s................. [ 92%]
........................................................................ [ 92%]
........................................................................ [ 93%]
........................................................................ [ 93%]
........................................................................ [ 93%]
........................................................................ [ 94%]
........................................................................ [ 94%]
........................................................................ [ 95%]
........................................................................ [ 95%]
........................................................................ [ 95%]
........................................................................ [ 96%]
........................................................................ [ 96%]
.....x...xxx.x..x.....x.xx...............x..x.x......................... [ 96%]
.......x.......x.............x.......................................... [ 97%]
........................................................................ [ 97%]
...........................................................x............ [ 98%]
X....................................................................... [ 98%]
........................................................................ [ 98%]
........................................................................ [ 99%]
........................................................................ [ 99%]
........................................................................ [ 99%]
...........                                                              [100%]

----------- coverage: platform linux, python 3.7.7-final-0 -----------
Name                                                               Stmts   Miss  Cover
--------------------------------------------------------------------------------------
modin/__init__.py                                                     76     38    50%
modin/_version.py                                                    272    172    37%
modin/apply_license_header.py                                         19     19     0%
modin/backends/__init__.py                                             0      0   100%
modin/backends/base/__init__.py                                        0      0   100%
modin/backends/base/query_compiler.py                                129      0   100%
modin/backends/pandas/__init__.py                                      0      0   100%
modin/backends/pandas/parsers.py                                     207    125    40%
modin/backends/pandas/query_compiler.py                              811    149    82%
modin/data_management/__init__.py                                      0      0   100%
modin/data_management/dispatcher.py                                   78     16    79%
modin/data_management/factories.py                                    85     26    69%
modin/data_management/functions/__init__.py                            7      0   100%
modin/data_management/functions/binary_function.py                    21      0   100%
modin/data_management/functions/foldfunction.py                        6      0   100%
modin/data_management/functions/function.py                            6      1    83%
modin/data_management/functions/groupby_function.py                   55     40    27%
modin/data_management/functions/mapfunction.py                         6      0   100%
modin/data_management/functions/mapreducefunction.py                   9      0   100%
modin/data_management/functions/reductionfunction.py                   6      0   100%
modin/data_management/utils.py                                        32     14    56%
modin/engines/__init__.py                                              0      0   100%
modin/engines/base/__init__.py                                         0      0   100%
modin/engines/base/frame/__init__.py                                   0      0   100%
modin/engines/base/frame/axis_partition.py                            45     28    38%
modin/engines/base/frame/data.py                                     491     42    91%
modin/engines/base/frame/partition.py                                  1      0   100%
modin/engines/base/frame/partition_manager.py                        159     30    81%
modin/engines/base/io/__init__.py                                     12      0   100%
modin/engines/base/io/column_stores/__init__.py                        0      0   100%
modin/engines/base/io/column_stores/column_store_reader.py            40      0   100%
modin/engines/base/io/column_stores/feather_reader.py                  9      0   100%
modin/engines/base/io/column_stores/hdf_reader.py                      3      0   100%
modin/engines/base/io/column_stores/parquet_reader.py                 34      1    97%
modin/engines/base/io/file_reader.py                                  85      7    92%
modin/engines/base/io/io.py                                          110     34    69%
modin/engines/base/io/sql/__init__.py                                  0      0   100%
modin/engines/base/io/sql/sql_reader.py                               39      1    97%
modin/engines/base/io/text/__init__.py                                 0      0   100%
modin/engines/base/io/text/csv_reader.py                             112      2    98%
modin/engines/base/io/text/excel_reader.py                           106      9    92%
modin/engines/base/io/text/fwf_reader.py                             115    108     6%
modin/engines/base/io/text/json_reader.py                             50      2    96%
modin/engines/base/io/text/text_file_reader.py                        34      1    97%
modin/engines/base/series/__init__.py                                  0      0   100%
modin/engines/dask/__init__.py                                         0      0   100%
modin/engines/dask/pandas_on_dask/__init__.py                          0      0   100%
modin/engines/dask/pandas_on_dask/frame/__init__.py                    0      0   100%
modin/engines/dask/pandas_on_dask/frame/axis_partition.py             27      1    96%
modin/engines/dask/pandas_on_dask/frame/data.py                       15      0   100%
modin/engines/dask/pandas_on_dask/frame/partition.py                  75     19    75%
modin/engines/dask/pandas_on_dask/frame/partition_manager.py          44     18    59%
modin/engines/dask/pandas_on_dask/io.py                               17      0   100%
modin/engines/dask/pandas_on_dask/series/__init__.py                   0      0   100%
modin/engines/dask/task_wrapper.py                                     9      0   100%
modin/engines/python/__init__.py                                       0      0   100%
modin/engines/python/pandas_on_python/__init__.py                      0      0   100%
modin/engines/python/pandas_on_python/frame/__init__.py                0      0   100%
modin/engines/python/pandas_on_python/frame/axis_partition.py         14     14     0%
modin/engines/python/pandas_on_python/frame/data.py                    4      4     0%
modin/engines/python/pandas_on_python/frame/partition.py              65     65     0%
modin/engines/python/pandas_on_python/frame/partition_manager.py       7      7     0%
modin/engines/python/pandas_on_python/io.py                            6      6     0%
modin/engines/python/pandas_on_python/series/__init__.py               0      0   100%
modin/engines/ray/__init__.py                                          0      0   100%
modin/engines/ray/generic/__init__.py                                  0      0   100%
modin/engines/ray/generic/frame/__init__.py                            0      0   100%
modin/engines/ray/generic/frame/partition_manager.py                  10     10     0%
modin/engines/ray/generic/io.py                                       14     14     0%
modin/engines/ray/generic/series/__init__.py                           0      0   100%
modin/engines/ray/pandas_on_ray/__init__.py                            0      0   100%
modin/engines/ray/pandas_on_ray/frame/__init__.py                      0      0   100%
modin/engines/ray/pandas_on_ray/frame/axis_partition.py               22     22     0%
modin/engines/ray/pandas_on_ray/frame/data.py                         11     11     0%
modin/engines/ray/pandas_on_ray/frame/partition.py                    86     86     0%
modin/engines/ray/pandas_on_ray/frame/partition_manager.py            43     43     0%
modin/engines/ray/pandas_on_ray/io.py                                 18     18     0%
modin/engines/ray/pandas_on_ray/series/__init__.py                     0      0   100%
modin/engines/ray/task_wrapper.py                                      7      7     0%
modin/engines/ray/utils.py                                            52     52     0%
modin/error_message.py                                                22      2    91%
modin/experimental/__init__.py                                         0      0   100%
modin/experimental/cloud/__init__.py                                   6      6     0%
modin/experimental/cloud/base.py                                      36     36     0%
modin/experimental/cloud/cluster.py                                   90     90     0%
modin/experimental/cloud/connection.py                                98     98     0%
modin/experimental/cloud/rayscale.py                                 107    107     0%
modin/experimental/engines/__init__.py                                 0      0   100%
modin/experimental/engines/pandas_on_ray/__init__.py                   0      0   100%
modin/experimental/engines/pandas_on_ray/io_exp.py                    38     38     0%
modin/experimental/engines/pandas_on_ray/sql.py                       66     66     0%
modin/experimental/pandas/__init__.py                                  6      6     0%
modin/experimental/pandas/io_exp.py                                    7      7     0%
modin/pandas/__init__.py                                              38      8    79%
modin/pandas/base.py                                                1213     52    96%
modin/pandas/concat.py                                                58      5    91%
modin/pandas/dataframe.py                                            870     95    89%
modin/pandas/datetimes.py                                              7      0   100%
modin/pandas/general.py                                               53      3    94%
modin/pandas/groupby.py                                              294     38    87%
modin/pandas/indexing.py                                             209     32    85%
modin/pandas/io.py                                                   147     11    93%
modin/pandas/iterator.py                                              17      0   100%
modin/pandas/reshape.py                                               30      0   100%
modin/pandas/series.py                                               945     80    92%
modin/pandas/utils.py                                                 28      3    89%
--------------------------------------------------------------------------------------
TOTAL                                                               8201   2045    75%

= 18460 passed, 31 skipped, 113 xfailed, 515 xpassed, 33161 warnings in 1373.69s (0:22:53) =

TOTAL                                                               8201   2045    75%

= 18460 passed, 31 skipped, 113 xfailed, 515 xpassed, 33161 warnings in 1373.69s (0:22:53) =

```

</details>

dchigarev: @devin-petersohn should we wait until GH actions will complete or passing in TeamCity is enough?
codecov[bot]: # [Codecov](https://codecov.io/gh/modin-project/modin/pull/1802?src=pr&el=h1) Report
> Merging [#1802](https://codecov.io/gh/modin-project/modin/pull/1802?src=pr&el=desc) into [master](https://codecov.io/gh/modin-project/modin/commit/8658f093eaf05273df7bd801ee38afc117a8c5fb&el=desc) will **decrease** coverage by `39.21%`.
> The diff coverage is `13.33%`.

[![Impacted file tree graph](https://codecov.io/gh/modin-project/modin/pull/1802/graphs/tree.svg?width=650&height=150&src=pr&token=ynEaSfgM5H)](https://codecov.io/gh/modin-project/modin/pull/1802?src=pr&el=tree)

```diff
@@             Coverage Diff             @@
##           master    #1802       +/-   ##
===========================================
- Coverage   82.32%   43.11%   -39.22%     
===========================================
  Files          77       77               
  Lines        8189     8297      +108     
===========================================
- Hits         6742     3577     -3165     
- Misses       1447     4720     +3273     
```


| [Impacted Files](https://codecov.io/gh/modin-project/modin/pull/1802?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [modin/backends/pandas/query\_compiler.py](https://codecov.io/gh/modin-project/modin/pull/1802/diff?src=pr&el=tree#diff-bW9kaW4vYmFja2VuZHMvcGFuZGFzL3F1ZXJ5X2NvbXBpbGVyLnB5) | `47.87% <ø> (-47.20%)` | :arrow_down: |
| [...odin/data\_management/functions/groupby\_function.py](https://codecov.io/gh/modin-project/modin/pull/1802/diff?src=pr&el=tree#diff-bW9kaW4vZGF0YV9tYW5hZ2VtZW50L2Z1bmN0aW9ucy9ncm91cGJ5X2Z1bmN0aW9uLnB5) | `10.71% <0.00%> (-81.29%)` | :arrow_down: |
| [modin/pandas/groupby.py](https://codecov.io/gh/modin-project/modin/pull/1802/diff?src=pr&el=tree#diff-bW9kaW4vcGFuZGFzL2dyb3VwYnkucHk=) | `30.61% <0.00%> (-56.33%)` | :arrow_down: |
| [modin/pandas/indexing.py](https://codecov.io/gh/modin-project/modin/pull/1802/diff?src=pr&el=tree#diff-bW9kaW4vcGFuZGFzL2luZGV4aW5nLnB5) | `83.56% <100.00%> (-0.83%)` | :arrow_down: |
| [modin/engines/dask/task\_wrapper.py](https://codecov.io/gh/modin-project/modin/pull/1802/diff?src=pr&el=tree#diff-bW9kaW4vZW5naW5lcy9kYXNrL3Rhc2tfd3JhcHBlci5weQ==) | `0.00% <0.00%> (-100.00%)` | :arrow_down: |
| [modin/experimental/pandas/io\_exp.py](https://codecov.io/gh/modin-project/modin/pull/1802/diff?src=pr&el=tree#diff-bW9kaW4vZXhwZXJpbWVudGFsL3BhbmRhcy9pb19leHAucHk=) | `0.00% <0.00%> (-100.00%)` | :arrow_down: |
| [modin/experimental/pandas/\_\_init\_\_.py](https://codecov.io/gh/modin-project/modin/pull/1802/diff?src=pr&el=tree#diff-bW9kaW4vZXhwZXJpbWVudGFsL3BhbmRhcy9fX2luaXRfXy5weQ==) | `0.00% <0.00%> (-100.00%)` | :arrow_down: |
| [modin/engines/dask/pandas\_on\_dask/io.py](https://codecov.io/gh/modin-project/modin/pull/1802/diff?src=pr&el=tree#diff-bW9kaW4vZW5naW5lcy9kYXNrL3BhbmRhc19vbl9kYXNrL2lvLnB5) | `0.00% <0.00%> (-100.00%)` | :arrow_down: |
| [modin/engines/dask/pandas\_on\_dask/frame/data.py](https://codecov.io/gh/modin-project/modin/pull/1802/diff?src=pr&el=tree#diff-bW9kaW4vZW5naW5lcy9kYXNrL3BhbmRhc19vbl9kYXNrL2ZyYW1lL2RhdGEucHk=) | `0.00% <0.00%> (-100.00%)` | :arrow_down: |
| [...ngines/dask/pandas\_on\_dask/frame/axis\_partition.py](https://codecov.io/gh/modin-project/modin/pull/1802/diff?src=pr&el=tree#diff-bW9kaW4vZW5naW5lcy9kYXNrL3BhbmRhc19vbl9kYXNrL2ZyYW1lL2F4aXNfcGFydGl0aW9uLnB5) | `0.00% <0.00%> (-96.30%)` | :arrow_down: |
| ... and [43 more](https://codecov.io/gh/modin-project/modin/pull/1802/diff?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/modin-project/modin/pull/1802?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/modin-project/modin/pull/1802?src=pr&el=footer). Last update [86e1a4e...46399a3](https://codecov.io/gh/modin-project/modin/pull/1802?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).


Patch:
diff --git a/examples/cluster/mortgage-runner.py b/examples/cluster/mortgage-runner.py
index 1c5c8122..3feb98f4 100644
--- a/examples/cluster/mortgage-runner.py
+++ b/examples/cluster/mortgage-runner.py
@@ -19,10 +19,9 @@
 # the following import turns on experimental mode in Modin,
 # including enabling running things in remote cloud
 import modin.experimental.pandas as pd  # noqa: F401
-from modin.experimental.cloud import create_cluster, get_connection
+from modin.experimental.cloud import create_cluster
 
 from mortgage import run_benchmark
-from mortgage.mortgage_pandas import etl_pandas
 
 test_cluster = create_cluster(
     "aws",
@@ -33,9 +32,6 @@ test_cluster = create_cluster(
     image="ami-00e1e82d7d4ca80d3",
 )
 with test_cluster:
-    conn = get_connection()
-    np = conn.modules["numpy"]
-    etl_pandas.__globals__["np"] = np
 
     parameters = {
         "data_file": "https://modin-datasets.s3.amazonaws.com/mortgage",
diff --git a/examples/cluster/taxi-runner.py b/examples/cluster/taxi-runner.py
new file mode 100644
index 00000000..6d4ed1d3
--- /dev/null
+++ b/examples/cluster/taxi-runner.py
@@ -0,0 +1,47 @@
+# Licensed to Modin Development Team under one or more contributor license agreements.
+# See the NOTICE file distributed with this work for additional information regarding
+# copyright ownership.  The Modin Development Team licenses this file to you under the
+# Apache License, Version 2.0 (the "License"); you may not use this file except in
+# compliance with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software distributed under
+# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific language
+# governing permissions and limitations under the License.
+
+
+# pip install git+https://github.com/intel-go/ibis.git@develop
+
+# NOTE: expects https://github.com/intel-go/omniscripts/ checked out and in PYTHONPATH
+
+# the following import turns on experimental mode in Modin,
+# including enabling running things in remote cloud
+import modin.experimental.pandas as pd  # noqa: F401
+from modin.experimental.cloud import create_cluster
+
+from taxi import run_benchmark as run_benchmark
+
+test_cluster = create_cluster(
+    "aws",
+    "aws_credentials",
+    cluster_name="rayscale-test",
+    region="eu-north-1",
+    zone="eu-north-1b",
+    image="ami-00e1e82d7d4ca80d3",
+)
+with test_cluster:
+    parameters = {
+        "data_file": "https://modin-datasets.s3.amazonaws.com/trips_data.csv",
+        # "data_file": "s3://modin-datasets/trips_data.csv",
+        "dfiles_num": 1,
+        "validation": False,
+        "no_ibis": True,
+        "no_pandas": False,
+        "pandas_mode": "Modin_on_ray",
+        "ray_tmpdir": "/tmp",
+        "ray_memory": 1024 * 1024 * 1024,
+    }
+
+    run_benchmark(parameters)
diff --git a/modin/backends/pandas/query_compiler.py b/modin/backends/pandas/query_compiler.py
index f940ddf2..181af801 100644
--- a/modin/backends/pandas/query_compiler.py
+++ b/modin/backends/pandas/query_compiler.py
@@ -2029,6 +2029,11 @@ class PandasQueryCompiler(BaseQueryCompiler):
     )
 
     def groupby_agg(self, by, axis, agg_func, groupby_args, agg_args, drop=False):
+        # since we're going to modify `groupby_args` dict in a `groupby_agg_builder`,
+        # we want to copy it to not propagate these changes into source dict, in case
+        # of unsuccessful end of function
+        groupby_args = groupby_args.copy()
+
         as_index = groupby_args.get("as_index", True)
 
         def groupby_agg_builder(df):
diff --git a/modin/data_management/factories.py b/modin/data_management/factories.py
index e6933ff2..eafbc40d 100644
--- a/modin/data_management/factories.py
+++ b/modin/data_management/factories.py
@@ -223,6 +223,9 @@ class ExperimentalPandasOnCloudrayFactory(ExperimentalBaseFactory):
         import modin.backends.pandas.query_compiler  # noqa: F401
         from modin.experimental.cloud import get_connection
 
+        # import a numpy overrider if it wasn't already imported
+        import modin.experimental.pandas.numpy_wrap  # noqa: F401
+
         class WrappedIO:
             def __init__(self, conn):
                 self.__conn = conn
@@ -241,8 +244,7 @@ class ExperimentalPandasOnCloudrayFactory(ExperimentalBaseFactory):
                     except KeyError:
 
                         def wrap(*a, _original=getattr(self.__io_cls, name), **kw):
-                            a = tuple(self.__conn.deliver(x) for x in a)
-                            kw = {k: self.__conn.deliver(v) for k, v in kw.items()}
+                            a, kw = self.__conn.deliver(a, kw)
                             return _original(*a, **kw)
 
                         self.__wrappers[name] = wrap
diff --git a/modin/data_management/functions/groupby_function.py b/modin/data_management/functions/groupby_function.py
index 6d2373d8..ddc10fda 100644
--- a/modin/data_management/functions/groupby_function.py
+++ b/modin/data_management/functions/groupby_function.py
@@ -40,7 +40,13 @@ class GroupbyReduceFunction(MapReduceFunction):
                 )
             else:
                 qc = query_compiler
+            # since we're going to modify `groupby_args` dict in a `compute_map`,
+            # we want to copy it to not propagate these changes into source dict, in case
+            # of unsuccessful end of function
+            groupby_args = groupby_args.copy()
+
             as_index = groupby_args.get("as_index", True)
+            observed = groupby_args.get("observed", False)
 
             def _map(df, other):
                 def compute_map(df, other):
@@ -48,6 +54,7 @@ class GroupbyReduceFunction(MapReduceFunction):
                     # It is used to make sure that between phases we are constructing the
                     # right index and placing columns in the correct order.
                     groupby_args["as_index"] = True
+                    groupby_args["observed"] = True
                     other = other.squeeze(axis=axis ^ 1)
                     if isinstance(other, pandas.DataFrame):
                         df = pandas.concat(
@@ -57,6 +64,20 @@ class GroupbyReduceFunction(MapReduceFunction):
                     result = map_func(
                         df.groupby(by=other, axis=axis, **groupby_args), **map_args
                     )
+                    # if `other` has category dtype, then pandas will drop that
+                    # column after groupby, inserting it back to correctly process
+                    # reduce phase
+                    if (
+                        drop
+                        and not as_index
+                        and isinstance(other, pandas.Series)
+                        and isinstance(other.dtype, pandas.CategoricalDtype)
+                        and result.index.name is not None
+                        and result.index.name not in result.columns
+                    ):
+                        result.insert(
+                            loc=0, column=result.index.name, value=result.index
+                        )
                     # The _modin_groupby_ prefix indicates that this is the first partition,
                     # and since we may need to insert the grouping data in the reduce phase
                     if (
@@ -82,6 +103,7 @@ class GroupbyReduceFunction(MapReduceFunction):
                     df = df.reset_index(drop=False)
                     # See note above about setting `as_index`
                     groupby_args["as_index"] = as_index
+                    groupby_args["observed"] = observed
                     if other_len > 1:
                         by_part = list(df.columns[0:other_len])
                     else:
@@ -98,7 +120,7 @@ class GroupbyReduceFunction(MapReduceFunction):
                     if isinstance(by_part, str) and by_part in result.columns:
                         if "_modin_groupby_" in by_part and drop:
                             col_name = by_part[len("_modin_groupby_") :]
-                            new_result = result.drop(columns=col_name)
+                            new_result = result.drop(columns=col_name, errors="ignore")
                             new_result.columns = [
                                 col_name if "_modin_groupby_" in c else c
                                 for c in new_result.columns
diff --git a/modin/experimental/cloud/cluster.py b/modin/experimental/cloud/cluster.py
index a2cb0633..bb1c3237 100644
--- a/modin/experimental/cloud/cluster.py
+++ b/modin/experimental/cloud/cluster.py
@@ -252,6 +252,14 @@ def create(
         The object that knows how to destroy the cluster and how to activate it as remote context.
         Note that by default spawning and destroying of the cluster happens in the background,
         as it's usually a rather lengthy process.
+
+    Notes
+    -----
+    Cluster computation actually can work when proxies are required to access the cloud.
+    You should set normal "http_proxy"/"https_proxy" variables for HTTP/HTTPS proxies and
+    set "MODIN_SOCKS_PROXY" variable for SOCKS proxy before calling the function.
+
+    Using SOCKS proxy requires Ray newer than 0.8.6, which might need to be installed manually.
     """
     if not isinstance(provider, Provider):
         provider = Provider(
diff --git a/modin/experimental/cloud/connection.py b/modin/experimental/cloud/connection.py
index 1e35ee97..ec2a2ccf 100644
--- a/modin/experimental/cloud/connection.py
+++ b/modin/experimental/cloud/connection.py
@@ -106,11 +106,12 @@ class Connection:
         from .rpyc_proxy import WrappingService
 
         try:
-            self.__connection = rpyc.connect(
-                "127.0.0.1",
-                self.rpyc_port,
+            stream = rpyc.SocketStream.connect(
+                host="127.0.0.1", port=self.rpyc_port, nodelay=True, keepalive=True
+            )
+            self.__connection = rpyc.connect_stream(
+                stream,
                 WrappingService,
-                keepalive=True,
                 config={"sync_request_timeout": RPYC_REQUEST_TIMEOUT},
             )
         except (ConnectionRefusedError, EOFError):
diff --git a/modin/experimental/cloud/rpyc_proxy.py b/modin/experimental/cloud/rpyc_proxy.py
index 3cc6321f..ceb605ff 100644
--- a/modin/experimental/cloud/rpyc_proxy.py
+++ b/modin/experimental/cloud/rpyc_proxy.py
@@ -12,34 +12,177 @@
 # governing permissions and limitations under the License.
 
 import types
+import collections
 
 import rpyc
 from rpyc.lib.compat import pickle
-from rpyc.core import netref
+from rpyc.lib import get_methods
+
+from rpyc.core import netref, AsyncResult, consts
 
 from . import get_connection
 from .meta_magic import _LOCAL_ATTRS, RemoteMeta, _KNOWN_DUALS
 
 
+def _batch_loads(items):
+    return tuple(pickle.loads(item) for item in items)
+
+
+def _tuplize(arg):
+    """turns any sequence or iterator into a flat tuple"""
+    return tuple(arg)
+
+
 class WrappingConnection(rpyc.Connection):
     def __init__(self, *a, **kw):
         super().__init__(*a, **kw)
-        self._remote_pickle_loads = None
+        self._remote_batch_loads = None
+        self._remote_cls_cache = {}
+        self._static_cache = collections.defaultdict(dict)
+        self._remote_dumps = None
+        self._remote_tuplize = None
+
+    def __wrap(self, local_obj):
+        while True:
+            # unwrap magic wrappers first; keep unwrapping in case it's a wrapper-in-a-wrapper
+            # this shouldn't usually happen, so this is mostly a safety net
+            try:
+                local_obj = object.__getattribute__(local_obj, "__remote_end__")
+            except AttributeError:
+                break
+        # do not pickle netrefs of our current connection, but do pickle those of other;
+        # example of this: an object made in _other_ remote context being pased to ours
+        if isinstance(local_obj, netref.BaseNetref) and local_obj.____conn__ is self:
+            return None
+        return bytes(pickle.dumps(local_obj))
+
+    def deliver(self, args, kw):
 
-    def deliver(self, local_obj):
         """
-        More caching version of rpyc.classic.deliver()
+        More efficient, batched version of rpyc.classic.deliver()
         """
-        try:
-            local_obj = object.__getattribute__(local_obj, "__remote_end__")
-        except AttributeError:
-            pass
-        if isinstance(local_obj, netref.BaseNetref) and local_obj.____conn__ is self:
-            return local_obj
-        return self._remote_pickle_loads(bytes(pickle.dumps(local_obj)))
+        pickled_args = [self.__wrap(arg) for arg in args]
+        pickled_kw = [(k, self.__wrap(v)) for (k, v) in kw.items()]
+
+        pickled = [i for i in pickled_args if i is not None] + [
+            v for (k, v) in pickled_kw if v is not None
+        ]
+        remote = iter(self._remote_batch_loads(tuple(pickled)))
+
+        delivered_args = []
+        for local_arg, pickled_arg in zip(args, pickled_args):
+            delivered_args.append(
+                next(remote) if pickled_arg is not None else local_arg
+            )
+        delivered_kw = {}
+        for k, pickled_v in pickled_kw:
+            delivered_kw[k] = next(remote) if pickled_v is not None else kw[k]
+
+        return tuple(delivered_args), delivered_kw
+
+    def obtain(self, remote):
+        while True:
+            try:
+                remote = object.__getattribute__(remote, "__remote_end__")
+            except AttributeError:
+                break
+        return pickle.loads(self._remote_dumps(remote))
+
+    def obtain_tuple(self, remote):
+        while True:
+            try:
+                remote = object.__getattribute__(remote, "__remote_end__")
+            except AttributeError:
+                break
+        return self._remote_tuplize(remote)
+
+    def sync_request(self, handler, *args):
+        """
+        Intercept outgoing synchronous requests from RPyC to add caching or
+        fulfilling them locally if possible to improve performance.
+        We should try to make as few remote calls as possible, because each
+        call adds up to latency.
+        """
+        if handler == consts.HANDLE_INSPECT:
+            # always inspect classes from modin, pandas and numpy locally,
+            # do not go to network for those
+            id_name = str(args[0][0])
+            if id_name.split(".", 1)[0] in ("modin", "pandas", "numpy"):
+                try:
+                    modobj = __import__(id_name)
+                    for subname in id_name.split(".")[1:]:
+                        modobj = getattr(modobj, subname)
+                except (ImportError, AttributeError):
+                    pass
+                else:
+                    return get_methods(netref.LOCAL_ATTRS, modobj)
+                modname, clsname = id_name.rsplit(".", 1)
+                try:
+                    modobj = __import__(modname)
+                    for subname in modname.split(".")[1:]:
+                        modobj = getattr(modobj, subname)
+                    clsobj = getattr(modobj, clsname)
+                except (ImportError, AttributeError):
+                    pass
+                else:
+                    return get_methods(netref.LOCAL_ATTRS, clsobj)
+        elif handler in (consts.HANDLE_GETATTR, consts.HANDLE_STR, consts.HANDLE_HASH):
+            if handler == consts.HANDLE_GETATTR:
+                obj, attr = args
+                key = (attr, handler)
+            else:
+                obj = args[0]
+                key = handler
+
+            if str(obj.____id_pack__[0]) in {"numpy", "numpy.dtype"}:
+                # always assume numpy attributes and numpy.dtype attributes are always the same;
+                # note that we're using RPyC id_pack as cache key, and it includes the name,
+                # class id and instance id, so this cache is unique to each instance of, say,
+                # numpy.dtype(), hence numpy.int16 and numpy.float64 got different caches.
+                cache = self._static_cache[obj.____id_pack__]
+                try:
+                    result = cache[key]
+                except KeyError:
+                    result = cache[key] = super().sync_request(handler, *args)
+                    if handler == consts.HANDLE_GETATTR:
+                        # save an entry in our cache telling that we get this attribute cached
+                        self._static_cache[result.____id_pack__]["__getattr__"] = True
+                return result
+
+        return super().sync_request(handler, *args)
+
+    def async_request(self, handler, *args, **kw):
+        """
+        Override async request handling to intercept outgoing deletion requests because we cache
+        certain things, and if we allow deletion of cached things our cache becomes stale.
+        We can clean the cache upon deletion, but it would increase cache misses a lot.
+
+        Also note that memory is not leaked forever, RPyC frees all of it upon disconnect.
+        """
+        if handler == consts.HANDLE_DEL:
+            obj, _ = args
+            if obj.____id_pack__ in self._static_cache:
+                # object is cached by us, so ignore the request or remote end dies and cache is suddenly stale;
+                # we shouldn't remove item from cache as it would reduce performance
+                res = AsyncResult(self)
+                res._is_ready = True  # simulate finished async request
+                return res
+        return super().async_request(handler, *args, **kw)
 
     def _netref_factory(self, id_pack):
-        result = super()._netref_factory(id_pack)
+        id_name, cls_id, inst_id = id_pack
+        id_name = str(id_name)
+        first = id_name.split(".", 1)[0]
+        if first in ("modin", "numpy", "pandas") and inst_id:
+            try:
+                cached_cls = self._remote_cls_cache[(id_name, cls_id)]
+            except KeyError:
+                result = super()._netref_factory(id_pack)
+                self._remote_cls_cache[(id_name, cls_id)] = type(result)
+            else:
+                result = cached_cls(self, id_pack)
+        else:
+            result = super()._netref_factory(id_pack)
         # try getting __real_cls__ from result.__class__ BUT make sure to
         # NOT get it from some parent class for result.__class__, otherwise
         # multiple wrappings happen
@@ -78,7 +221,13 @@ class WrappingConnection(rpyc.Connection):
         return super()._box(obj)
 
     def _init_deliver(self):
-        self._remote_pickle_loads = self.modules["rpyc.lib.compat"].pickle.loads
+        self._remote_batch_loads = self.modules[
+            "modin.experimental.cloud.rpyc_proxy"
+        ]._batch_loads
+        self._remote_dumps = self.modules["rpyc.lib.compat"].pickle.dumps
+        self._remote_tuplize = self.modules[
+            "modin.experimental.cloud.rpyc_proxy"
+        ]._tuplize
 
 
 class WrappingService(rpyc.ClassicService):
@@ -167,6 +316,7 @@ def make_proxy_cls(
             type(obj).__dict__ (EXCLUDING parent classes) and then goes to proxy type.
             """
             namespace = type.__prepare__(*args, **kw)
+            namespace["__remote_methods__"] = {}
 
             # try computing overridden differently to allow subclassing one override from another
             no_override = set(_NO_OVERRIDE)
@@ -204,9 +354,15 @@ def make_proxy_cls(
                     ):
 
                         def method(_self, *_args, __method_name__=name, **_kw):
-                            return getattr(_self.__remote_end__, __method_name__)(
-                                *_args, **_kw
-                            )
+                            try:
+                                remote = _self.__remote_methods__[__method_name__]
+                            except KeyError:
+                                # use remote_cls.__getattr__ to force RPyC return us
+                                # a proxy for remote method call instead of its local wrapper
+                                _self.__remote_methods__[
+                                    __method_name__
+                                ] = remote = remote_cls.__getattr__(__method_name__)
+                            return remote(_self.__remote_end__, *_args, **_kw)
 
                         method.__name__ = name
                         namespace[name] = method
@@ -353,9 +509,16 @@ def _deliveringWrapper(
     for method in methods:
 
         def wrapper(self, *args, __remote_conn__=conn, __method_name__=method, **kw):
-            args = tuple(__remote_conn__.deliver(x) for x in args)
-            kw = {k: __remote_conn__.deliver(v) for k, v in kw.items()}
-            return getattr(self.__remote_end__, __method_name__)(*args, **kw)
+            args, kw = __remote_conn__.deliver(args, kw)
+            cache = object.__getattribute__(self, "__remote_methods__")
+            try:
+                remote = cache[__method_name__]
+            except KeyError:
+                # see comments in ProxyMeta.__prepare__ on using remote_cls.__getattr__
+                cache[__method_name__] = remote = remote_cls.__getattr__(
+                    __method_name__
+                )
+            return remote(self.__remote_end__, *args, **kw)
 
         wrapper.__name__ = method
         setattr(mixin, method, wrapper)
@@ -396,10 +559,30 @@ def make_dataframe_wrapper(DataFrame):
     It makes DF.loc, DF.groupby() and other methods listed below deliver their
     arguments to remote end by value.
     """
+
+    from modin.pandas.series import Series
+
+    conn = get_connection()
+
+    class ObtainingItems:
+        def items(self):
+            return conn.obtain_tuple(self.__remote_end__.items())
+
+        def iteritems(self):
+            return conn.obtain_tuple(self.__remote_end__.iteritems())
+
+    ObtainingItems = _deliveringWrapper(Series, mixin=ObtainingItems)
+
+    class DataFrameOverrides(_prepare_loc_mixin()):
+        @property
+        def dtypes(self):
+            remote_dtypes = self.__remote_end__.dtypes
+            return ObtainingItems(__remote_end__=remote_dtypes)
+
     DeliveringDataFrame = _deliveringWrapper(
         DataFrame,
         ["groupby", "agg", "aggregate", "__getitem__", "astype", "drop", "merge"],
-        _prepare_loc_mixin(),
+        DataFrameOverrides,
         "DataFrame",
     )
     return DeliveringDataFrame
diff --git a/modin/experimental/pandas/__init__.py b/modin/experimental/pandas/__init__.py
index 7a2d6444..ef624f13 100644
--- a/modin/experimental/pandas/__init__.py
+++ b/modin/experimental/pandas/__init__.py
@@ -14,6 +14,10 @@
 import os
 
 os.environ["MODIN_EXPERIMENTAL"] = "True"
+
+# import numpy_wrap as early as possible to intercept all "import numpy" statements
+# in the user code
+from .numpy_wrap import _CAUGHT_NUMPY  # noqa F401
 from modin.pandas import *  # noqa F401, F403
 from .io_exp import read_sql  # noqa F401
 import warnings
diff --git a/modin/experimental/pandas/numpy_wrap.py b/modin/experimental/pandas/numpy_wrap.py
new file mode 100644
index 00000000..d7bd78af
--- /dev/null
+++ b/modin/experimental/pandas/numpy_wrap.py
@@ -0,0 +1,165 @@
+# Licensed to Modin Development Team under one or more contributor license agreements.
+# See the NOTICE file distributed with this work for additional information regarding
+# copyright ownership.  The Modin Development Team licenses this file to you under the
+# Apache License, Version 2.0 (the "License"); you may not use this file except in
+# compliance with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software distributed under
+# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific language
+# governing permissions and limitations under the License.
+
+import sys
+
+"""
+This is a module that hides real numpy from future "import numpy" statements
+and replaces it with a wrapping module that serves attributes from either
+local or "remote" numpy depending on active execution context.
+"""
+_CAUGHT_NUMPY = "numpy" not in sys.modules
+try:
+    import numpy as real_numpy
+except ImportError:
+    pass
+else:
+    import types
+    import copyreg
+    from modin import execution_engine
+    import modin
+    import pandas
+    import os
+
+    _EXCLUDE_MODULES = [modin, pandas]
+    try:
+        import rpyc
+    except ImportError:
+        pass
+    else:
+        _EXCLUDE_MODULES.append(rpyc)
+    _EXCLUDE_PATHS = tuple(
+        os.path.dirname(mod.__file__) + os.sep for mod in _EXCLUDE_MODULES
+    )
+
+    class InterceptedNumpy(types.ModuleType):
+        """
+        This class is intended to replace the "numpy" module as seen by outer world,
+        getting attributes from either local numpy or remote one when remote context
+        is activated.
+        It also registers helpers for pickling local numpy objects in remote context
+        and vice versa.
+        """
+
+        __own_attrs__ = set(["__own_attrs__"])
+
+        __spec__ = real_numpy.__spec__
+        __current_numpy = real_numpy
+        __prev_numpy = real_numpy
+        __has_to_warn = not _CAUGHT_NUMPY
+        __reducers = {}
+
+        def __init__(self):
+            self.__own_attrs__ = set(type(self).__dict__.keys())
+            execution_engine.subscribe(self.__update_engine)
+
+        def __swap_numpy(self, other_numpy=None):
+            self.__current_numpy, self.__prev_numpy = (
+                other_numpy or self.__prev_numpy,
+                self.__current_numpy,
+            )
+            if self.__current_numpy is not real_numpy and self.__has_to_warn:
+                import warnings
+
+                warnings.warn(
+                    "Was not able to intercept all numpy imports. "
+                    "To intercept all of these please do 'import modin.experimental.pandas' as early as possible"
+                )
+                self.__has_to_warn = False
+
+        def __update_engine(self, _):
+            if execution_engine.get() == "Cloudray":
+                from modin.experimental.cloud import get_connection
+
+                self.__swap_numpy(get_connection().modules["numpy"])
+            else:
+                self.__swap_numpy()
+
+        def __make_reducer(self, name):
+            """
+            Prepare a "reducer" routine - the one Pickle calls to serialize an instance of a class.
+            Note that we need this to allow pickling a local numpy object in "remote numpy" context,
+            because without a custom reduce callback pickle complains that what it reduced has a
+            different "numpy" class than original.
+            """
+            try:
+                reducer = self.__reducers[name]
+            except KeyError:
+
+                def reducer(
+                    obj,
+                    real_obj=getattr(real_numpy, name),
+                    real_obj_reducer=getattr(real_numpy, name).__reduce__,
+                ):
+                    # See details on __reduce__ protocol in Python docs:
+                    # https://docs.python.org/3.6/library/pickle.html#object.__reduce__
+                    reduced = real_obj_reducer(obj)
+                    if not isinstance(reduced, tuple):
+                        return reduced
+                    assert isinstance(
+                        reduced[0],
+                        (type, types.FunctionType, types.BuiltinFunctionType),
+                    ), "Do not know how to support this reconstructor"
+
+                    modobj = self.__current_numpy
+                    for submod in reduced[0].__module__.split(".")[1:]:
+                        modobj = getattr(modobj, submod)
+                    reconstruct = getattr(modobj, reduced[0].__name__)
+                    # TODO: see if replacing all "real numpy" things in reduced[1:] is needed
+                    return (reconstruct,) + reduced[1:]
+
+                self.__reducers[name] = reducer
+            return reducer
+
+        def __get_numpy(self):
+            frame = sys._getframe()
+            try:
+                # get the path to module where caller of caller is defined;
+                # this function is expected to be called from one of
+                # __getattr__, __setattr__ or __delattr__, so this
+                # "caller_file" should point to the file that wants a
+                # numpy attribute; we want to always give local numpy
+                # to modin, numpy and rpyc as it's all internal for us
+                caller_file = frame.f_back.f_back.f_code.co_filename
+            except AttributeError:
+                return self.__current_numpy
+            finally:
+                del frame
+            if any(caller_file.startswith(mod_path) for mod_path in _EXCLUDE_PATHS):
+                return real_numpy
+            return self.__current_numpy
+
+        def __getattr__(self, name):
+            # note that __getattr__ is not symmetric to __setattr__, as it is
+            # only called when an attribute is not found by usual lookups
+            obj = getattr(self.__get_numpy(), name)
+            if isinstance(obj, type):
+                # register a special callback for pickling
+                copyreg.pickle(obj, self.__make_reducer(name))
+            return obj
+
+        def __setattr__(self, name, value):
+            # set our own attributes on the self instance, but pass through
+            # setting other attributes to numpy being wrapped
+            if name in self.__own_attrs__:
+                super().__setattr__(name, value)
+            else:
+                setattr(self.__get_numpy(), name, value)
+
+        def __delattr__(self, name):
+            # do not allow to delete our own attributes, pass through
+            # deletion of others to numpy being wrapped
+            if name not in self.__own_attrs__:
+                delattr(self.__get_numpy(), name)
+
+    sys.modules["numpy"] = InterceptedNumpy()
diff --git a/modin/pandas/groupby.py b/modin/pandas/groupby.py
index 52f5972d..383f23ab 100644
--- a/modin/pandas/groupby.py
+++ b/modin/pandas/groupby.py
@@ -128,7 +128,7 @@ class DataFrameGroupBy(object):
                 }
             else:
                 if isinstance(self._by, type(self._query_compiler)):
-                    by = self._by.to_pandas().squeeze()
+                    by = self._by.to_pandas().squeeze().values
                 else:
                     by = self._by
                 if self._axis == 0:
@@ -433,7 +433,7 @@ class DataFrameGroupBy(object):
             series_result = Series(query_compiler=result._query_compiler)
             # Pandas does not name size() output
             series_result.name = None
-            return series_result
+            return series_result.fillna(0)
         else:
             return DataFrameGroupBy(
                 self._df.T,
@@ -529,12 +529,16 @@ class DataFrameGroupBy(object):
         return result
 
     def count(self, **kwargs):
-        return self._wrap_aggregation(
+        result = self._wrap_aggregation(
             type(self._query_compiler).groupby_count,
             lambda df, **kwargs: df.count(**kwargs),
             numeric_only=False,
             **kwargs,
         )
+        # pandas do it in case of Series
+        if isinstance(result, Series):
+            result = result.fillna(0)
+        return result
 
     def pipe(self, func, *args, **kwargs):
         return com.pipe(self, func, *args, **kwargs)


Test patch:
diff --git a/modin/pandas/test/test_groupby.py b/modin/pandas/test/test_groupby.py
index 5dbe30ba..060906df 100644
--- a/modin/pandas/test/test_groupby.py
+++ b/modin/pandas/test/test_groupby.py
@@ -21,18 +21,28 @@ from .utils import (
     check_df_columns_have_nans,
     create_test_dfs,
     eval_general,
+    df_categories_equals,
 )
 
 pd.DEFAULT_NPARTITIONS = 4
 
 
 def modin_df_almost_equals_pandas(modin_df, pandas_df):
-    difference = to_pandas(modin_df) - pandas_df
+    df_categories_equals(modin_df._to_pandas(), pandas_df)
+
+    modin_df = to_pandas(modin_df)
+
+    if hasattr(modin_df, "select_dtypes"):
+        modin_df = modin_df.select_dtypes(exclude=["category"])
+    if hasattr(pandas_df, "select_dtypes"):
+        pandas_df = pandas_df.select_dtypes(exclude=["category"])
+
+    difference = modin_df - pandas_df
     diff_max = difference.max()
     if isinstance(diff_max, pandas.Series):
         diff_max = diff_max.max()
     assert (
-        to_pandas(modin_df).equals(pandas_df)
+        modin_df.equals(pandas_df)
         or diff_max < 0.0001
         or (all(modin_df.isna().all()) and all(pandas_df.isna().all()))
     )
@@ -234,7 +244,8 @@ def test_mixed_dtypes_groupby(as_index):
     ],
 )
 @pytest.mark.parametrize("as_index", [True, False])
-def test_simple_row_groupby(by, as_index):
+@pytest.mark.parametrize("col1_category", [True, False])
+def test_simple_row_groupby(by, as_index, col1_category):
     pandas_df = pandas.DataFrame(
         {
             "col1": [0, 1, 2, 3],
@@ -245,6 +256,9 @@ def test_simple_row_groupby(by, as_index):
         }
     )
 
+    if col1_category:
+        pandas_df = pandas_df.astype({"col1": "category"})
+
     modin_df = from_pandas(pandas_df)
     n = 1
     modin_groupby = modin_df.groupby(by=by, as_index=as_index)
@@ -267,10 +281,10 @@ def test_simple_row_groupby(by, as_index):
     eval_ndim(modin_groupby, pandas_groupby)
     if not check_df_columns_have_nans(modin_df, by):
         # cum* functions produce undefined results for columns with NaNs so we run them only when "by" columns contain no NaNs
-        eval_cumsum(modin_groupby, pandas_groupby)
-        eval_cummax(modin_groupby, pandas_groupby)
-        eval_cummin(modin_groupby, pandas_groupby)
-        eval_cumprod(modin_groupby, pandas_groupby)
+        eval_general(modin_groupby, pandas_groupby, lambda df: df.cumsum(axis=0))
+        eval_general(modin_groupby, pandas_groupby, lambda df: df.cummax(axis=0))
+        eval_general(modin_groupby, pandas_groupby, lambda df: df.cummin(axis=0))
+        eval_general(modin_groupby, pandas_groupby, lambda df: df.cumprod(axis=0))
 
     eval_general(
         modin_groupby,
@@ -312,7 +326,7 @@ def test_simple_row_groupby(by, as_index):
         modin_df_almost_equals_pandas,
         is_default=True,
     )
-    eval_rank(modin_groupby, pandas_groupby)
+    eval_general(modin_groupby, pandas_groupby, lambda df: df.rank())
     eval_max(modin_groupby, pandas_groupby)
     eval_len(modin_groupby, pandas_groupby)
     eval_sum(modin_groupby, pandas_groupby)
@@ -332,7 +346,12 @@ def test_simple_row_groupby(by, as_index):
         # Pandas groupby.transform does not work correctly with NaN values in grouping columns. See Pandas bug 17093.
         transform_functions = [lambda df: df + 4, lambda df: -df - 10]
         for func in transform_functions:
-            eval_transform(modin_groupby, pandas_groupby, func)
+            eval_general(
+                modin_groupby,
+                pandas_groupby,
+                lambda df: df.transform(func),
+                check_exception_type=None,
+            )
 
     pipe_functions = [lambda dfgb: dfgb.sum()]
     for func in pipe_functions:
@@ -347,7 +366,9 @@ def test_simple_row_groupby(by, as_index):
     )
     eval_fillna(modin_groupby, pandas_groupby)
     eval_count(modin_groupby, pandas_groupby)
-    eval_size(modin_groupby, pandas_groupby)
+    eval_general(
+        modin_groupby, pandas_groupby, lambda df: df.size(), check_exception_type=None
+    )
     eval_general(modin_groupby, pandas_groupby, lambda df: df.tail(n), is_default=True)
     eval_quantile(modin_groupby, pandas_groupby)
     eval_general(modin_groupby, pandas_groupby, lambda df: df.take(), is_default=True)
@@ -471,7 +492,8 @@ def test_single_group_row_groupby():
     eval_groups(modin_groupby, pandas_groupby)
 
 
-def test_large_row_groupby():
+@pytest.mark.parametrize("is_by_category", [True, False])
+def test_large_row_groupby(is_by_category):
     pandas_df = pandas.DataFrame(
         np.random.randint(0, 8, size=(100, 4)), columns=list("ABCD")
     )
@@ -479,6 +501,10 @@ def test_large_row_groupby():
     modin_df = from_pandas(pandas_df)
 
     by = [str(i) for i in pandas_df["A"].tolist()]
+
+    if is_by_category:
+        by = pandas.Categorical(by)
+
     n = 4
 
     modin_groupby = modin_df.groupby(by=by)
diff --git a/modin/pandas/test/utils.py b/modin/pandas/test/utils.py
index bd7dcd05..ddd1eac4 100644
--- a/modin/pandas/test/utils.py
+++ b/modin/pandas/test/utils.py
@@ -381,8 +381,17 @@ def categories_equals(left, right):
 
 
 def df_categories_equals(df1, df2):
-    categories_columns = df1.select_dtypes(include="category").columns
+    if not hasattr(df1, "select_dtypes"):
+        if isinstance(df1, pandas.CategoricalDtype):
+            return categories_equals(df1, df2)
+        elif isinstance(getattr(df1, "dtype"), pandas.CategoricalDtype) and isinstance(
+            getattr(df1, "dtype"), pandas.CategoricalDtype
+        ):
+            return categories_equals(df1.dtype, df2.dtype)
+        else:
+            return True
 
+    categories_columns = df1.select_dtypes(include="category").columns
     for column in categories_columns:
         is_category_ordered = df1[column].dtype.ordered
         assert_categorical_equal(
@@ -558,17 +567,27 @@ def check_df_columns_have_nans(df, cols):
 
 
 def eval_general(
-    modin_df, pandas_df, operation, comparator=df_equals, __inplace__=False, **kwargs
+    modin_df,
+    pandas_df,
+    operation,
+    comparator=df_equals,
+    __inplace__=False,
+    check_exception_type=True,
+    **kwargs,
 ):
     md_kwargs, pd_kwargs = {}, {}
 
     def execute_callable(fn, inplace=False, md_kwargs={}, pd_kwargs={}):
         try:
             pd_result = fn(pandas_df, **pd_kwargs)
-        except Exception as e:
-            with pytest.raises(type(e)):
+        except Exception as pd_e:
+            if check_exception_type is None:
+                return None
+            with pytest.raises(Exception) as md_e:
                 # repr to force materialization
                 repr(fn(modin_df, **md_kwargs))
+            if check_exception_type:
+                assert isinstance(md_e.value, type(pd_e))
         else:
             md_result = fn(modin_df, **md_kwargs)
             return (md_result, pd_result) if not __inplace__ else (modin_df, pandas_df)