Skip to content

Commit 9bcd368

Browse files
committed
Add distinct in ColumnSelectionDsl.
1 parent f317c40 commit 9bcd368

File tree

4 files changed

+19
-0
lines changed

4 files changed

+19
-0
lines changed

docs/StardustDocs/topics/ColumnSelectors.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,9 @@ df.select { allDfs().filter { it.name.startsWith("year") } }
209209

210210
// exclude columns from column set
211211
df.select { allDfs().except { age } }
212+
213+
// keep only unique columns
214+
df.select { (colsOf<Int>() and age).distinct() }
212215
```
213216

214217
<!---END-->

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import org.jetbrains.kotlinx.dataframe.impl.DataFrameReceiver
2020
import org.jetbrains.kotlinx.dataframe.impl.columnName
2121
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnAccessorImpl
2222
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnsList
23+
import org.jetbrains.kotlinx.dataframe.impl.columns.DistinctColumnSet
2324
import org.jetbrains.kotlinx.dataframe.impl.columns.allColumnsExcept
2425
import org.jetbrains.kotlinx.dataframe.impl.columns.createColumnSet
2526
import org.jetbrains.kotlinx.dataframe.impl.columns.getAt
@@ -327,6 +328,8 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
327328

328329
// endregion
329330

331+
public fun <C> ColumnSet<C>.distinct(): ColumnSet<C> = DistinctColumnSet(this)
332+
330333
public operator fun <C> String.invoke(newColumnExpression: RowExpression<T, C>): DataColumn<C> =
331334
newColumnWithActualType(this, newColumnExpression)
332335

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.jetbrains.kotlinx.dataframe.impl.columns
2+
3+
import org.jetbrains.kotlinx.dataframe.columns.ColumnResolutionContext
4+
import org.jetbrains.kotlinx.dataframe.columns.ColumnSet
5+
import org.jetbrains.kotlinx.dataframe.columns.ColumnWithPath
6+
7+
internal class DistinctColumnSet<T>(val src: ColumnSet<T>) : ColumnSet<T> {
8+
override fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<T>> =
9+
src.resolve(context).distinctBy { it.path }
10+
}

src/test/kotlin/org/jetbrains/kotlinx/dataframe/samples/api/Access.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,9 @@ class Access : TestBase() {
802802

803803
// exclude columns from column set
804804
df.select { allDfs().except { age } }
805+
806+
// keep only unique columns
807+
df.select { (colsOf<Int>() and age).distinct() }
805808
// SampleEnd
806809
}
807810

0 commit comments

Comments
 (0)