<!--
{
  "availability" : [
    "iOS: 15.0.0 -",
    "iPadOS: 15.0.0 -",
    "macCatalyst: 15.0.0 -",
    "macOS: 12.0.0 -",
    "tvOS: 15.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 8.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "TabularData",
  "identifier" : "/documentation/TabularData/RowGrouping",
  "metadataVersion" : "0.1.0",
  "role" : "Structure",
  "symbol" : {
    "kind" : "Structure",
    "modules" : [
      "TabularData"
    ],
    "preciseIdentifier" : "s:11TabularData11RowGroupingV"
  },
  "title" : "RowGrouping"
}
-->

# RowGrouping

A collection of row selections that have the same value in a column.

```
struct RowGrouping<GroupingKey> where GroupingKey : Hashable
```

## Topics

### Creating a Row Grouping

[`init<D>(frame: D, columnName: String, timeUnit: Calendar.Component)`](/documentation/TabularData/RowGrouping/init(frame:columnName:timeUnit:))

Creates a row grouping from a column with date or time elements.

[`init<D>(groups: [(GroupingKey?, D)], groupKeysColumnName: String)`](/documentation/TabularData/RowGrouping/init(groups:groupKeysColumnName:))

Creates a row grouping from a list of groups.

### Inspecting a Row Grouping

[`var count: Int`](/documentation/TabularData/RowGrouping/count)

The number of groups in the row grouping.

[`subscript(Int) -> (key: GroupingKey?, group: DataFrame.Slice)`](/documentation/TabularData/RowGrouping/subscript(_:)-5z2eg)

Retrieves a group at an index.

### Transforming a Row Grouping

[`func mapGroups((DataFrame.Slice) throws -> DataFrame) rethrows -> RowGrouping<GroupingKey>`](/documentation/TabularData/RowGrouping/mapGroups(_:))

Generates a row grouping that applies a transformation closure to each group in the original.

### Splitting a Row Grouping

[`func randomSplit(by: Double, seed: Int?) -> (RowGrouping<GroupingKey>, RowGrouping<GroupingKey>)`](/documentation/TabularData/RowGrouping/randomSplit(by:seed:))

Generates two row groupings by randomly splitting the original with a proportion and a seed number.

### Aggregating a Row Grouping

[`func counts(order: Order?) -> DataFrame`](/documentation/TabularData/RowGrouping/counts(order:))

Generates a data frame with two columns, one that has a row for each group key and another for the number of
rows in the group.

[`func aggregated<Element, Result>(on: [String], naming: (String) -> String, transform: (DiscontiguousColumnSlice<Element>) throws -> Result?) rethrows -> DataFrame`](/documentation/TabularData/RowGrouping/aggregated(on:naming:transform:))

Generates a data frame by aggregating each group’s contents for each column you list by name.

### Flattening a Row Grouping

[`func ungrouped() -> DataFrame`](/documentation/TabularData/RowGrouping/ungrouped())

Generates a data frame that contains all the rows from each group in the row grouping.

### Summarizing a Row Grouping

[`func summary() -> any GroupSummaries`](/documentation/TabularData/RowGrouping/summary())

Generates a group summaries instance for the columns of the row grouping.

[`func summary(of: [String]) -> any GroupSummaries`](/documentation/TabularData/RowGrouping/summary(of:))

Generates a group summaries instance for the columns you select by name.

[`protocol GroupSummaries`](/documentation/TabularData/GroupSummaries)

A collection of group summaries.

### Describing a Row Grouping

[`var description: String`](/documentation/TabularData/RowGrouping/description)

A text representation of the row grouping.

### Invoking Protocol Methods

  <doc:API-Sequence--RowGrouping>

  <doc:API-Collection--RowGrouping>

  <doc:API-Bidirectional-Collection--RowGrouping>

  <doc:API-Random-Access-Collection--RowGrouping>

### Subscripts

[`subscript(Any?...) -> DataFrame.Slice?`](/documentation/TabularData/RowGrouping/subscript(_:)-2xxs8)

Retrieves a group slice by key.

### Default Implementations

[Collection Implementations](/documentation/TabularData/RowGrouping/Collection-Implementations)

[RandomAccessCollection Implementations](/documentation/TabularData/RowGrouping/RandomAccessCollection-Implementations)

[RowGroupingProtocol Implementations](/documentation/TabularData/RowGrouping/RowGroupingProtocol-Implementations)

## Relationships

### Conforms To

[`Collection`](/documentation/Swift/Collection)

[`Copyable`](/documentation/Swift/Copyable)

[`RowGroupingProtocol`](/documentation/TabularData/RowGroupingProtocol)

[`Escapable`](/documentation/Swift/Escapable)

[`CustomStringConvertible`](/documentation/Swift/CustomStringConvertible)

[`RandomAccessCollection`](/documentation/Swift/RandomAccessCollection)

[`Sequence`](/documentation/Swift/Sequence)

[`BidirectionalCollection`](/documentation/Swift/BidirectionalCollection)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)