Skip to content

Commit 65050c3

Browse files
committed
Fix default column selector for explode
1 parent 504ee12 commit 65050c3

File tree

2 files changed

+22
-4
lines changed
  • src
    • main/kotlin/org/jetbrains/kotlinx/dataframe/api
    • test/kotlin/org/jetbrains/kotlinx/dataframe/api

2 files changed

+22
-4
lines changed

src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/explode.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ import org.jetbrains.kotlinx.dataframe.impl.api.explodeImpl
1010
import org.jetbrains.kotlinx.dataframe.impl.columns.toColumns
1111
import kotlin.reflect.KProperty
1212

13+
private val defaultExplodeColumns: ColumnsSelector<*, *> = { dfs { it.isList() || it.isFrameColumn() } }
14+
1315
// region explode DataFrame
1416

1517
public fun <T> DataFrame<T>.explode(
1618
dropEmpty: Boolean = true,
17-
selector: ColumnsSelector<T, *> = { all() }
19+
selector: ColumnsSelector<T, *> = defaultExplodeColumns
1820
): DataFrame<T> = explodeImpl(dropEmpty, selector)
1921

2022
public fun <T> DataFrame<T>.explode(vararg columns: String, dropEmpty: Boolean = true): DataFrame<T> =
@@ -32,7 +34,7 @@ public fun <T, C> DataFrame<T>.explode(vararg columns: KProperty<C>, dropEmpty:
3234

3335
public fun <T> DataRow<T>.explode(
3436
dropEmpty: Boolean = true,
35-
selector: ColumnsSelector<T, *> = { all() }
37+
selector: ColumnsSelector<T, *> = defaultExplodeColumns
3638
): DataFrame<T> = toDataFrame().explode(dropEmpty, selector)
3739

3840
public fun <T> DataRow<T>.explode(vararg columns: String, dropEmpty: Boolean = true): DataFrame<T> =

src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/explode.kt

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,24 @@ class ExplodeTests {
88
@Test
99
fun `explode into`() {
1010
val df = dataFrameOf("a" to listOf(1), "b" to listOf(listOf(2, 3)))
11-
val imploded = df.explode { "b" into "c" }
11+
val exploded = df.explode { "b" into "c" }
1212
val expected = dataFrameOf("a" to listOf(1, 1), "c" to listOf(2, 3))
13-
imploded shouldBe expected
13+
exploded shouldBe expected
14+
}
15+
16+
@Test
17+
fun `explode list and duplicate value`() {
18+
val exploded = dataFrameOf("a", "b")(1, listOf(2, 3)).explode()
19+
exploded shouldBe dataFrameOf("a", "b")(1, 2, 1, 3)
20+
}
21+
22+
@Test
23+
fun `explode list and frame column`() {
24+
val exploded = dataFrameOf("a", "b", "c", "d")(1, listOf(2, 3), dataFrameOf("x", "y")(4, 5, 6, 7), listOf(8))
25+
.explode().ungroup("c")
26+
exploded shouldBe dataFrameOf("a", "b", "x", "y", "d")(
27+
1, 2, 4, 5, 8,
28+
1, 3, 6, 7, null
29+
)
1430
}
1531
}

0 commit comments

Comments
 (0)