
org.jetbrains.kotlinx.dataframe.api.take.kt Maven / Gradle / Ivy
package org.jetbrains.kotlinx.dataframe.api
import org.jetbrains.kotlinx.dataframe.DataColumn
import org.jetbrains.kotlinx.dataframe.DataFrame
import org.jetbrains.kotlinx.dataframe.RowFilter
import org.jetbrains.kotlinx.dataframe.columns.size
import org.jetbrains.kotlinx.dataframe.index
import org.jetbrains.kotlinx.dataframe.nrow
// region DataColumn
public fun DataColumn.take(n: Int): DataColumn = when {
n == 0 -> get(emptyList())
n >= size -> this
else -> get(0 until n)
}
public fun DataColumn.takeLast(n: Int): DataColumn = drop(size - n)
// endregion
// region DataFrame
/**
* Returns a DataFrame containing first [n] rows.
*
* @throws IllegalArgumentException if [n] is negative.
*/
public fun DataFrame.take(n: Int): DataFrame {
require(n >= 0) { "Requested rows count $n is less than zero." }
return getRows(0 until n.coerceAtMost(nrow))
}
/**
* Returns a DataFrame containing last [n] rows.
*
* @throws IllegalArgumentException if [n] is negative.
*/
public fun DataFrame.takeLast(n: Int): DataFrame {
require(n >= 0) { "Requested rows count $n is less than zero." }
return drop((nrow - n).coerceAtLeast(0))
}
/**
* Returns a DataFrame containing first rows that satisfy the given [predicate].
*/
public fun DataFrame.takeWhile(predicate: RowFilter): DataFrame = firstOrNull { !predicate(it, it) }?.let { take(it.index) } ?: this
// endregion
© 2015 - 2025 Weber Informatics LLC | Privacy Policy