Skip to content

Commit b7b2778

Browse files
committed
Add update{}.asFrame{} for ColumnGroup update.
1 parent 9cab2cc commit b7b2778

File tree

4 files changed

+26
-2
lines changed

4 files changed

+26
-2
lines changed

docs/StardustDocs/topics/update.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ Returns `DataFrame` with changed values in some cells. Column types can not be c
88
update { columns }
99
[.where { rowCondition } ]
1010
[.at(rowIndices) ]
11-
.with { rowExpression } | .notNull { rowExpression } | .perCol { colExpression } | .perRowCol { rowColExpression } | .withValue(value) | .withNull() | .withZero()
11+
.with { rowExpression } | .notNull { rowExpression } | .perCol { colExpression } | .perRowCol { rowColExpression } | .withValue(value) | .withNull() | .withZero() | .asFrame { frameExpression }
1212
1313
rowCondition: DataRow.(OldValue) -> Boolean
1414
rowExpression: DataRow.(OldValue) -> NewValue
1515
colExpression: DataColumn.(DataColumn) -> NewValue
1616
rowColExpression: DataRow.(DataColumn) -> NewValue
17+
frameExpression: DataFrame.(DataFrame) -> DataFrame
1718
```
1819

1920
See [column selectors](ColumnSelectors.md) and [row expressions](DataRow.md#row-expressions)
@@ -68,3 +69,13 @@ df.update { colsOf<String?>() }.perRowCol { row, col -> col.name() + ": " + row.
6869
```
6970

7071
<!---END-->
72+
73+
Update [ColumnGroup](DataColumn.md#columngroup) as [DataFrame](DataFrame.md):
74+
75+
<!---FUN updateAsFrame-->
76+
77+
```kotlin
78+
df.update { name }.asFrame { select { lastName } }
79+
```
80+
81+
<!---END-->

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import org.jetbrains.kotlinx.dataframe.AnyRow
44
import org.jetbrains.kotlinx.dataframe.ColumnsSelector
55
import org.jetbrains.kotlinx.dataframe.DataColumn
66
import org.jetbrains.kotlinx.dataframe.DataFrame
7+
import org.jetbrains.kotlinx.dataframe.DataFrameExpression
8+
import org.jetbrains.kotlinx.dataframe.DataRow
79
import org.jetbrains.kotlinx.dataframe.RowColumnExpression
810
import org.jetbrains.kotlinx.dataframe.RowValueExpression
911
import org.jetbrains.kotlinx.dataframe.RowValueFilter
@@ -54,6 +56,9 @@ public infix fun <T, C> Update<T, C>.with(expression: UpdateExpression<T, C, C?>
5456
expression(row, value)
5557
}
5658

59+
public infix fun <T, C, R> Update<T, DataRow<C>>.asFrame(expression: DataFrameExpression<C, DataFrame<R>>): DataFrame<T> =
60+
df.replace(columns).with { it.asColumnGroup().let { expression(it, it) }.asColumnGroup(it.name()) }
61+
5762
public fun <T, C> Update<T, C>.asNullable(): Update<T, C?> = this as Update<T, C?>
5863

5964
public fun <T, C> Update<T, C>.perCol(values: Map<String, C>): DataFrame<T> = updateWithValuePerColumnImpl {

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,15 @@ class Modify : TestBase() {
3434
// SampleEnd
3535
}
3636

37+
@Test
38+
fun updateAsFrame() {
39+
val res =
40+
// SampleStart
41+
df.update { name }.asFrame { select { lastName } }
42+
// SampleEnd
43+
res shouldBe df.remove { name.firstName }
44+
}
45+
3746
@Test
3847
fun updatePerColumn() {
3948
val updated =

tests/src/test/kotlin/org/jetbrains/kotlinx/dataframe/testSets/person/DataFrameTreeTests.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import org.jetbrains.kotlinx.dataframe.api.GroupWithKey
1414
import org.jetbrains.kotlinx.dataframe.api.add
1515
import org.jetbrains.kotlinx.dataframe.api.addId
1616
import org.jetbrains.kotlinx.dataframe.api.after
17-
import org.jetbrains.kotlinx.dataframe.api.all
1817
import org.jetbrains.kotlinx.dataframe.api.append
1918
import org.jetbrains.kotlinx.dataframe.api.asColumnGroup
2019
import org.jetbrains.kotlinx.dataframe.api.asDataFrame

0 commit comments

Comments
 (0)