@@ -4,10 +4,13 @@ import org.jetbrains.kotlinx.dataframe.AnyColumnReference
44import org.jetbrains.kotlinx.dataframe.ColumnsSelector
55import org.jetbrains.kotlinx.dataframe.DataFrame
66import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload
7+ import org.jetbrains.kotlinx.dataframe.api.Select.SelectSelectingOptions
78import org.jetbrains.kotlinx.dataframe.columns.ColumnSet
89import org.jetbrains.kotlinx.dataframe.columns.SingleColumn
910import org.jetbrains.kotlinx.dataframe.columns.toColumnSet
11+ import org.jetbrains.kotlinx.dataframe.documentation.DocumentationUrls
1012import org.jetbrains.kotlinx.dataframe.documentation.DslGrammarTemplateColumnsSelectionDsl.DslGrammarTemplate
13+ import org.jetbrains.kotlinx.dataframe.documentation.ExcludeFromSources
1114import org.jetbrains.kotlinx.dataframe.documentation.Indent
1215import org.jetbrains.kotlinx.dataframe.exceptions.DuplicateColumnNamesException
1316import org.jetbrains.kotlinx.dataframe.impl.columns.DistinctColumnSet
@@ -16,33 +19,92 @@ import kotlin.reflect.KProperty
1619
1720// region DataFrame
1821
22+
23+ /* *
24+ * ## The Distinct Operation
25+ *
26+ * It removes duplicated rows based on {@get PHRASE_ENDING}.
27+ *
28+ * __NOTE:__ The rows in the resulting [DataFrame] are in the same order as they were in the original [DataFrame].
29+ *
30+ * {@get [DISTINCT_PARAM] @param [columns]
31+ * The names of the columns to consider for evaluating distinct rows.}
32+ *
33+ * @return A new DataFrame containing only distinct rows.
34+ *
35+ * @see [Selecting Columns][SelectSelectingOptions].
36+ * @see {@include [DocumentationUrls.Distinct]}
37+ */
38+ @ExcludeFromSources
39+ private interface DistinctDocs {
40+ interface DISTINCT_PARAM
41+ }
42+
43+ /* *
44+ * {@include [DistinctDocs]}
45+ * {@set PHRASE_ENDING all columns}.
46+ * {@set [DistinctDocs.DISTINCT_PARAM]}
47+ */
1948public fun <T > DataFrame<T>.distinct (): DataFrame <T > = distinctBy { all() }
2049
50+ /* *
51+ * {@include [DistinctDocs]}
52+ * {@set PHRASE_ENDING the specified columns}.
53+ */
2154public fun <T , C > DataFrame<T>.distinct (columns : ColumnsSelector <T , C >): DataFrame <T > = select(columns).distinct()
2255
56+ /* *
57+ * {@include [DistinctDocs]}
58+ * {@set PHRASE_ENDING the specified columns}.
59+ */
2360@AccessApiOverload
2461public fun <T > DataFrame<T>.distinct (vararg columns : KProperty <* >): DataFrame <T > =
2562 distinct {
2663 val set = columns.toColumnSet()
2764 set
2865 }
2966
67+ /* *
68+ * {@include [DistinctDocs]}
69+ * {@set PHRASE_ENDING the specified columns}.
70+ */
3071public fun <T > DataFrame<T>.distinct (vararg columns : String ): DataFrame <T > = distinct { columns.toColumnSet() }
3172
73+ /* *
74+ * {@include [DistinctDocs]}
75+ * {@set PHRASE_ENDING the specified columns}.
76+ */
3277@AccessApiOverload
3378public fun <T > DataFrame<T>.distinct (vararg columns : AnyColumnReference ): DataFrame <T > =
3479 distinct { columns.toColumnSet() }
3580
81+ /* *
82+ * {@include [DistinctDocs]}
83+ * {@set PHRASE_ENDING the specified columns}.
84+ */
3685@AccessApiOverload
3786public fun <T > DataFrame<T>.distinctBy (vararg columns : KProperty <* >): DataFrame <T > =
3887 distinctBy { columns.toColumnSet() }
3988
89+ /* *
90+ * {@include [DistinctDocs]}
91+ * {@set PHRASE_ENDING the specified columns}.
92+ */
4093public fun <T > DataFrame<T>.distinctBy (vararg columns : String ): DataFrame <T > = distinctBy { columns.toColumnSet() }
4194
95+ /* *
96+ * {@include [DistinctDocs]}
97+ * {@set PHRASE_ENDING the specified columns}.
98+ */
4299@AccessApiOverload
43100public fun <T > DataFrame<T>.distinctBy (vararg columns : AnyColumnReference ): DataFrame <T > =
44101 distinctBy { columns.toColumnSet() }
45102
103+
104+ /* *
105+ * {@include [DistinctDocs]}
106+ * {@set PHRASE_ENDING the specified columns}.
107+ */
46108public fun <T , C > DataFrame<T>.distinctBy (columns : ColumnsSelector <T , C >): DataFrame <T > {
47109 val cols = get(columns)
48110 val distinctIndices = indices.distinctBy { i -> cols.map { it[i] } }
0 commit comments