Repository: databricks/koalas

Issue:
Error when using bitwise-and operator with compute.ops_on_diff_frames enabled 
```python
import databricks.koalas as ks
from databricks.koalas.config import set_option

set_option('compute.ops_on_diff_frames', True)

left = ks.Series([0])
kser = ks.Series([1])
right = ks.Series([2])

# works
lmask = kser > left
rmask = kser < right

# raises error
lmask & rmask
```

gave

```
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-10-4fb8d0b7871a> in <module>
     11 rmask = kser < right
     12 
---> 13 lmask & rmask

/srv/conda/envs/notebook/lib/python3.7/site-packages/databricks/koalas/base.py in wrapper(self, *args)
     64                 return f(this_column, *that_columns)
     65 
---> 66             return align_diff_series(apply_func, self, *args, how="full")
     67 
     68     return wrapper

/srv/conda/envs/notebook/lib/python3.7/site-packages/databricks/koalas/utils.py in align_diff_series(func, this_series, how, *args)
    257 
    258     cols = [arg for arg in args if isinstance(arg, IndexOpsMixin)]
--> 259     combined = combine_frames(this_series.to_frame(), *cols, how=how)
    260 
    261     that_columns = [combined['that'][arg._internal.column_index[0]]._scol

/srv/conda/envs/notebook/lib/python3.7/site-packages/databricks/koalas/utils.py in combine_frames(this, how, *args)
     55         if this is args[0]._kdf:
     56             return  # We don't need to combine. All series is in this.
---> 57         that = args[0]._kdf[[ser.name for ser in args]]
     58     elif len(args) == 1 and isinstance(args[0], DataFrame):
     59         assert isinstance(args[0], DataFrame)

/srv/conda/envs/notebook/lib/python3.7/site-packages/databricks/koalas/frame.py in __getitem__(self, key)
   7572 
   7573     def __getitem__(self, key):
-> 7574         return self._pd_getitem(key)
   7575 
   7576     def __setitem__(self, key, value):

/srv/conda/envs/notebook/lib/python3.7/site-packages/databricks/koalas/frame.py in _pd_getitem(self, key)
   7508             raise NotImplementedError(key)
   7509         if isinstance(key, list):
-> 7510             return self.loc[:, key]
   7511         if isinstance(key, DataFrame):
   7512             # TODO Should not implement alignment, too dangerous?

/srv/conda/envs/notebook/lib/python3.7/site-packages/databricks/koalas/indexing.py in __getitem__(self, key)
    470                         found = True
    471                 if not found:
--> 472                     raise KeyError("['{}'] not in index".format(key))
    473 
    474         try:

KeyError: "['0'] not in index"
```


Discussion:
Using series from the same dataframe works.

```python
df = ks.DataFrame({
    'left': [0],
    'kser': [1],
    'right': [2]
})

# works
lmask = df['kser'] > df['left']
rmask = df['kser'] < df['right']

>>> lmask & rmask
0    True
Name: kser, dtype: bool
```

Resolving patch:
diff --git a/databricks/koalas/utils.py b/databricks/koalas/utils.py
--- a/databricks/koalas/utils.py
+++ b/databricks/koalas/utils.py
@@ -54,7 +54,7 @@ def combine_frames(this, *args, how="full"):
             "Currently only one different DataFrame (from given Series) is supported"
         if this is args[0]._kdf:
             return  # We don't need to combine. All series is in this.
-        that = args[0]._kdf[[ser.name for ser in args]]
+        that = args[0]._kdf[list(args)]
     elif len(args) == 1 and isinstance(args[0], DataFrame):
         assert isinstance(args[0], DataFrame)
         if this is args[0]:


Test patch:
diff --git a/databricks/koalas/tests/test_ops_on_diff_frames.py b/databricks/koalas/tests/test_ops_on_diff_frames.py
--- a/databricks/koalas/tests/test_ops_on_diff_frames.py
+++ b/databricks/koalas/tests/test_ops_on_diff_frames.py
@@ -175,8 +175,8 @@ def test_arithmetic_chain(self):
             (pdf1.a - pdf2.b - pdf3.c).rename("a").sort_index(), almost=True)
 
         self.assert_eq(
-            (kdf1.a * kdf2.a * kdf3.c).sort_index(),
-            (pdf1.a * pdf2.a * pdf3.c).rename("a").sort_index(), almost=True)
+            (kdf1.a * (kdf2.a * kdf3.c)).sort_index(),
+            (pdf1.a * (pdf2.a * pdf3.c)).rename("a").sort_index(), almost=True)
 
         self.assert_eq(
             (kdf1["a"] / kdf2["a"] / kdf3["c"]).sort_index(),
@@ -205,6 +205,12 @@ def test_arithmetic_chain(self):
             .sort_index(),
             almost=True)
 
+        self.assert_eq(
+            (kdf1[('x', 'a')] * (kdf2[('x', 'b')] * kdf3[('y', 'c')])).sort_index(),
+            (pdf1[('x', 'a')] * (pdf2[('x', 'b')] * pdf3[('y', 'c')])).rename(('x', 'a'))
+            .sort_index(),
+            almost=True)
+
         # DataFrame
         self.assert_eq(
             (kdf1 + kdf2 - kdf3).sort_index(),