Skip to content

Commit 3f0911d

Browse files
authored
Fix assign for multi-index columns support. (#657)
1 parent ea61ad9 commit 3f0911d

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

databricks/koalas/frame.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -2785,10 +2785,13 @@ def assign(self, **kwargs):
27852785
sdf = sdf.withColumn(name, F.lit(c))
27862786

27872787
data_columns = set(self._internal.data_columns)
2788+
adding_columns = [name for name, _ in pairs if name not in data_columns]
2789+
level = self._internal.column_index_level
2790+
adding_column_index = [tuple([col, *([''] * (level - 1))]) for col in adding_columns]
27882791
internal = self._internal.copy(
27892792
sdf=sdf,
2790-
data_columns=(self._internal.data_columns +
2791-
[name for name, _ in pairs if name not in data_columns]))
2793+
data_columns=(self._internal.data_columns + adding_columns),
2794+
column_index=(self._internal.column_index + adding_column_index))
27922795
return DataFrame(internal)
27932796

27942797
@staticmethod

databricks/koalas/tests/test_dataframe.py

+15
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,15 @@ def test_assign(self):
267267

268268
self.assert_eq(kdf, pdf)
269269

270+
columns = pd.MultiIndex.from_tuples([('x', 'a'), ('x', 'b'), ('y', 'w')])
271+
pdf.columns = columns
272+
kdf.columns = columns
273+
274+
pdf['Z'] = 'ZZ'
275+
kdf['Z'] = 'ZZ'
276+
277+
self.assert_eq(kdf, pdf)
278+
270279
def test_head_tail(self):
271280
kdf = self.kdf
272281
pdf = self.pdf
@@ -848,6 +857,12 @@ def test_append(self):
848857
self.assert_eq(kdf.append(multi_index_kdf, ignore_index=True),
849858
pdf.append(multi_index_pdf, ignore_index=True))
850859

860+
columns = pd.MultiIndex.from_tuples([('A', 'X'), ('A', 'Y')])
861+
pdf.columns = columns
862+
kdf.columns = columns
863+
864+
self.assert_eq(kdf.append(kdf), pdf.append(pdf))
865+
851866
def test_clip(self):
852867
pdf = pd.DataFrame({'A': [0, 2, 4]})
853868
kdf = ks.from_pandas(pdf)

0 commit comments

Comments
 (0)