arkouda.groupbyclass¶
Classes¶
frozenset() -> empty frozenset object |
|
Group an array or list of arrays by value, usually in preparation |
Functions¶
Module Contents¶
- class arkouda.groupbyclass.GROUPBY_REDUCTION_TYPES¶
frozenset() -> empty frozenset object frozenset(iterable) -> frozenset object
Build an immutable unordered collection of unique elements.
- copy(*args, **kwargs)¶
Return a shallow copy of a set.
- difference(*args, **kwargs)¶
Return the difference of two or more sets as a new set.
(i.e. all elements that are in this set but not the others.)
- intersection(*args, **kwargs)¶
Return the intersection of two sets as a new set.
(i.e. all elements that are in both sets.)
- isdisjoint(*args, **kwargs)¶
Return True if two sets have a null intersection.
- issubset(*args, **kwargs)¶
Report whether another set contains this set.
- issuperset(*args, **kwargs)¶
Report whether this set contains another set.
- symmetric_difference(*args, **kwargs)¶
Return the symmetric difference of two sets as a new set.
(i.e. all elements that are in exactly one of the sets.)
- union(*args, **kwargs)¶
Return the union of sets as a new set.
(i.e. all elements that are in either set.)
- class arkouda.groupbyclass.GroupBy[source]¶
Group an array or list of arrays by value, usually in preparation for aggregating the within-group values of another array.
- Parameters:
keys ((list of) pdarray, Strings, or Categorical) – The array to group by value, or if list, the column arrays to group by row
assume_sorted (bool) – If True, assume keys is already sorted (Default: False)
- nkeys¶
The number of key arrays (columns)
- Type:
int
- unique_keys¶
The unique values of the keys array(s), in grouped order
- Type:
(list of) pdarray, Strings, or Categorical
- ngroups¶
The length of the unique_keys array(s), i.e. number of groups
- Type:
int
- logger¶
Used for all logging operations
- Type:
ArkoudaLogger
- dropna¶
If True, and the groupby keys contain NaN values, the NaN values together with the corresponding row will be dropped. Otherwise, the rows corresponding to NaN values will be kept.
- Type:
bool (default=True)
- Raises:
TypeError – Raised if keys is a pdarray with a dtype other than int64
Notes
Integral pdarrays, Strings, and Categoricals are natively supported, but float64 and bool arrays are not.
For a user-defined class to be groupable, it must inherit from pdarray and define or overload the grouping API:
a ._get_grouping_keys() method that returns a list of pdarrays that can be (co)argsorted.
(Optional) a .group() method that returns the permutation that groups the array
If the input is a single array with a .group() method defined, method 2 will be used; otherwise, method 1 will be used.
- AND(values: pdarray) Tuple[pdarray | List[pdarray | Strings], pdarray] [source]¶
Bitwise AND of values in each segment.
Using the permutation stored in the GroupBy instance, group another array of values and perform a bitwise AND reduction on each group.
- Parameters:
values (pdarray, int64) – The values to group and reduce with AND
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
result (pdarray, int64) – Bitwise AND of values in segments corresponding to keys
- Raises:
TypeError – Raised if the values array is not a pdarray or if the pdarray dtype is not int64
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
RuntimeError – Raised if all is not supported for the values dtype
- OR(values: pdarray) Tuple[pdarray | List[pdarray | Strings], pdarray] [source]¶
Bitwise OR of values in each segment.
Using the permutation stored in the GroupBy instance, group another array of values and perform a bitwise OR reduction on each group.
- Parameters:
values (pdarray, int64) – The values to group and reduce with OR
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
result (pdarray, int64) – Bitwise OR of values in segments corresponding to keys
- Raises:
TypeError – Raised if the values array is not a pdarray or if the pdarray dtype is not int64
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
RuntimeError – Raised if all is not supported for the values dtype
- Reductions(*args, **kwargs)¶
frozenset() -> empty frozenset object frozenset(iterable) -> frozenset object
Build an immutable unordered collection of unique elements.
- XOR(values: pdarray) Tuple[pdarray | List[pdarray | Strings], pdarray] [source]¶
Bitwise XOR of values in each segment.
Using the permutation stored in the GroupBy instance, group another array of values and perform a bitwise XOR reduction on each group.
- Parameters:
values (pdarray, int64) – The values to group and reduce with XOR
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
result (pdarray, int64) – Bitwise XOR of values in segments corresponding to keys
- Raises:
TypeError – Raised if the values array is not a pdarray or if the pdarray dtype is not int64
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
RuntimeError – Raised if all is not supported for the values dtype
- aggregate(values: groupable, operator: str, skipna: bool = True, ddof: int_scalars = 1) Tuple[groupable, groupable] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and apply a reduction to each group’s values.
- Parameters:
values (pdarray) – The values to group and reduce
operator (str) – The name of the reduction operator to use
skipna (bool) – boolean which determines if NANs should be skipped
ddof (int_scalars) – “Delta Degrees of Freedom” used in calculating std
- Returns:
unique_keys (groupable) – The unique keys, in grouped order
aggregates (groupable) – One aggregate value per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the values array is not a pdarray
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
RuntimeError – Raised if the requested operator is not supported for the values dtype
Examples
>>> keys = ak.arange(0, 10) >>> vals = ak.linspace(-1, 1, 10) >>> g = ak.GroupBy(keys) >>> g.aggregate(vals, 'sum') (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), array([-1, -0.77777777777777768, -0.55555555555555536, -0.33333333333333348, -0.11111111111111116, 0.11111111111111116, 0.33333333333333348, 0.55555555555555536, 0.77777777777777768, 1])) >>> g.aggregate(vals, 'min') (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), array([-1, -0.77777777777777779, -0.55555555555555558, -0.33333333333333337, -0.11111111111111116, 0.11111111111111116, 0.33333333333333326, 0.55555555555555536, 0.77777777777777768, 1]))
- all(values: pdarray) Tuple[pdarray | List[pdarray | Strings], pdarray] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and perform an “and” reduction on each group.
- Parameters:
values (pdarray, bool) – The values to group and reduce with “and”
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
group_any (pdarray, bool) – One bool per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the values array is not a pdarray or if the pdarray dtype is not bool
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
RuntimeError – Raised if all is not supported for the values dtype
- any(values: pdarray) Tuple[pdarray | List[pdarray | Strings], pdarray] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and perform an “or” reduction on each group.
- Parameters:
values (pdarray, bool) – The values to group and reduce with “or”
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
group_any (pdarray, bool) – One bool per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the values array is not a pdarray or if the pdarray dtype is not bool
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
- argmax(values: pdarray) Tuple[groupable, pdarray] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and return the location of the first maximum of each group’s values.
- Parameters:
values (pdarray) – The values to group and find argmax
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
group_argmaxima (pdarray, int64) – One index per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the values array is not a pdarray object or if argmax is not supported for the values dtype
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
Notes
The returned indices refer to the original values array as passed in, not the permutation applied by the GroupBy instance.
Examples
>>> a = ak.randint(1,5,10) >>> a array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> g = ak.GroupBy(a) >>> g.keys array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> b = ak.randint(1,5,10) >>> b array([3, 3, 3, 4, 1, 1, 3, 3, 3, 4]) >>> g.argmax(b) (array([2, 3, 4]), array([9, 3, 2]))
- argmin(values: pdarray) Tuple[groupable, pdarray] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and return the location of the first minimum of each group’s values.
- Parameters:
values (pdarray) – The values to group and find argmin
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
group_argminima (pdarray, int64) – One index per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the values array is not a pdarray object or if argmax is not supported for the values dtype
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
RuntimeError – Raised if argmin is not supported for the values dtype
Notes
The returned indices refer to the original values array as passed in, not the permutation applied by the GroupBy instance.
Examples
>>> a = ak.randint(1,5,10) >>> a array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> g = ak.GroupBy(a) >>> g.keys array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> b = ak.randint(1,5,10) >>> b array([3, 3, 3, 4, 1, 1, 3, 3, 3, 4]) >>> g.argmin(b) (array([2, 3, 4]), array([5, 4, 2]))
- attach(user_defined_name: str) GroupBy [source]¶
Function to return a GroupBy object attached to the registered name in the arkouda server which was registered using register()
- Parameters:
user_defined_name (str) – user defined name which GroupBy object was registered under
- Returns:
The GroupBy object created by re-attaching to the corresponding server components
- Return type:
- Raises:
RegistrationError – if user_defined_name is not registered
See also
register
,is_registered
,unregister
,unregister_groupby_by_name
- broadcast(values: pdarray | Strings, permute: bool = True) pdarray | Strings [source]¶
Fill each group’s segment with a constant value.
- Parameters:
- Returns:
The broadcasted values
- Return type:
- Raises:
TypeError – Raised if value is not a pdarray object
ValueError – Raised if the values array does not have one value per segment
Notes
This function is a sparse analog of
np.broadcast
. If a GroupBy object represents a sparse matrix (tensor), then this function takes a (dense) column vector and replicates each value to the non-zero elements in the corresponding row.Examples
>>> a = ak.array([0, 1, 0, 1, 0]) >>> values = ak.array([3, 5]) >>> g = ak.GroupBy(a) # By default, result is in original order >>> g.broadcast(values) array([3, 5, 3, 5, 3]) # With permute=False, result is in grouped order >>> g.broadcast(values, permute=False) array([3, 3, 3, 5, 5] >>> a = ak.randint(1,5,10) >>> a array([3, 1, 4, 4, 4, 1, 3, 3, 2, 2]) >>> g = ak.GroupBy(a) >>> keys,counts = g.size() >>> g.broadcast(counts > 2) array([True False True True True False True True False False]) >>> g.broadcast(counts == 3) array([True False True True True False True True False False]) >>> g.broadcast(counts < 4) array([True True True True True True True True True True])
- build_from_components(user_defined_name: str | None = None, **kwargs) GroupBy [source]¶
function to build a new GroupBy object from component keys and permutation.
- Parameters:
user_defined_name (str (Optional) Passing a name will init the new GroupBy) – and assign it the given name
kwargs (dict Dictionary of components required for rebuilding the GroupBy.) – Expected keys are “orig_keys”, “permutation”, “unique_keys”, and “segments”
- Returns:
The GroupBy object created by using the given components
- Return type:
- count(values: pdarray) Tuple[groupable, pdarray] [source]¶
Count the number of elements in each group. NaN values will be excluded from the total.
- Parameters:
values (pdarray) – The values to be count by group (excluding NaN values).
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
counts (pdarray, int64) – The number of times each unique key appears (excluding NaN values).
Examples
>>> a = ak.array([1, 0, -1, 1, 0, -1]) >>> a array([1 0 -1 1 0 -1]) >>> b = ak.array([1, np.nan, -1, np.nan, np.nan, -1], dtype = "float64") >>> b array([1.00000000000000000 nan -1.00000000000000000 nan nan -1.00000000000000000]) >>> g = ak.GroupBy(a) >>> keys,counts = g.count(b) >>> keys array([-1 0 1]) >>> counts array([2 0 1])
- first(values: groupable_element_type) Tuple[groupable, groupable_element_type] [source]¶
First value in each group.
- Parameters:
values (pdarray-like) – The values from which to take the first of each group
- Returns:
unique_keys ((list of) pdarray-like) – The unique keys, in grouped order
result (pdarray-like) – The first value of each group
- head(values: groupable_element_type, n: int = 5, return_indices: bool = True) Tuple[groupable, groupable_element_type] [source]¶
Return the first n values from each group.
- Parameters:
values ((list of) pdarray-like) – The values from which to select, according to their group membership.
n (int, optional, default = 5) – Maximum number of items to return for each group. If the number of values in a group is less than n, all the values from that group will be returned.
return_indices (bool, default False) – If True, return the indices of the sampled values. Otherwise, return the selected values.
- Returns:
unique_keys ((list of) pdarray-like) – The unique keys, in grouped order
result (pdarray-like) – The first n items of each group. If return_indices is True, the result are indices. O.W. the result are values.
Examples
>>> a = ak.arange(10) %3 >>> a array([0 1 2 0 1 2 0 1 2 0]) >>> v = ak.arange(10) >>> v array([0 1 2 3 4 5 6 7 8 9]) >>> g = GroupBy(a) >>> unique_keys, idx = g.head(v, 2, return_indices=True) >>> _, values = g.head(v, 2, return_indices=False) >>> unique_keys array([0 1 2]) >>> idx array([0 3 1 4 2 5]) >>> values array([0 3 1 4 2 5])
>>> v2 = -2 * ak.arange(10) >>> v2 array([0 -2 -4 -6 -8 -10 -12 -14 -16 -18]) >>> _, idx2 = g.head(v2, 2, return_indices=True) >>> _, values2 = g.head(v2, 2, return_indices=False) >>> idx2 array([0 3 1 4 2 5]) >>> values2 array([0 -6 -2 -8 -4 -10])
- is_registered() bool [source]¶
Return True if the object is contained in the registry
- Returns:
Indicates if the object is contained in the registry
- Return type:
bool
- Raises:
RegistrationError – Raised if there’s a server-side error or a mismatch of registered components
See also
Notes
Objects registered with the server are immune to deletion until they are unregistered.
- max(values: pdarray, skipna: bool = True) Tuple[groupable, pdarray] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and return the maximum of each group’s values.
- Parameters:
values (pdarray) – The values to group and find maxima
skipna (bool) – boolean which determines if NANs should be skipped
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
group_maxima (pdarray) – One maximum per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the values array is not a pdarray object or if max is not supported for the values dtype
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
RuntimeError – Raised if max is not supported for the values dtype
Examples
>>> a = ak.randint(1,5,10) >>> a array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> g = ak.GroupBy(a) >>> g.keys array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> b = ak.randint(1,5,10) >>> b array([3, 3, 3, 4, 1, 1, 3, 3, 3, 4]) >>> g.max(b) (array([2, 3, 4]), array([4, 4, 3]))
- mean(values: pdarray, skipna: bool = True) Tuple[groupable, pdarray] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and compute the mean of each group’s values.
- Parameters:
values (pdarray) – The values to group and average
skipna (bool) – boolean which determines if NANs should be skipped
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
group_means (pdarray, float64) – One mean value per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the values array is not a pdarray object
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
Notes
The return dtype is always float64.
Examples
>>> a = ak.randint(1,5,10) >>> a array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> g = ak.GroupBy(a) >>> g.keys array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> b = ak.randint(1,5,10) >>> b array([3, 3, 3, 4, 1, 1, 3, 3, 3, 4]) >>> g.mean(b) (array([2, 3, 4]), array([2.6666666666666665, 2.7999999999999998, 3]))
- median(values: pdarray, skipna: bool = True) Tuple[groupable, pdarray] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and compute the median of each group’s values.
- Parameters:
values (pdarray) – The values to group and find median
skipna (bool) – boolean which determines if NANs should be skipped
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
group_medians (pdarray, float64) – One median value per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the values array is not a pdarray object
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
Notes
The return dtype is always float64.
Examples
>>> a = ak.randint(1,5,9) >>> a array([4 1 4 3 2 2 2 3 3]) >>> g = ak.GroupBy(a) >>> g.keys array([4 1 4 3 2 2 2 3 3]) >>> b = ak.linspace(-5,5,9) >>> b array([-5 -3.75 -2.5 -1.25 0 1.25 2.5 3.75 5]) >>> g.median(b) (array([1 2 3 4]), array([-3.75 1.25 3.75 -3.75]))
- min(values: pdarray, skipna: bool = True) Tuple[groupable, pdarray] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and return the minimum of each group’s values.
- Parameters:
values (pdarray) – The values to group and find minima
skipna (bool) – boolean which determines if NANs should be skipped
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
group_minima (pdarray) – One minimum per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the values array is not a pdarray object or if min is not supported for the values dtype
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
RuntimeError – Raised if min is not supported for the values dtype
Examples
>>> a = ak.randint(1,5,10) >>> a array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> g = ak.GroupBy(a) >>> g.keys array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> b = ak.randint(1,5,10) >>> b array([3, 3, 3, 4, 1, 1, 3, 3, 3, 4]) >>> g.min(b) (array([2, 3, 4]), array([1, 1, 3]))
- mode(values: groupable) Tuple[groupable, groupable] [source]¶
Most common value in each group. If a group is multi-modal, return the modal value that occurs first.
- Parameters:
values ((list of) pdarray-like) – The values from which to take the mode of each group
- Returns:
unique_keys ((list of) pdarray-like) – The unique keys, in grouped order
result ((list of) pdarray-like) – The most common value of each group
- nunique(values: groupable) Tuple[groupable, pdarray] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and return the number of unique values in each group.
- Parameters:
values (pdarray, int64) – The values to group and find unique values
- Returns:
unique_keys (groupable) – The unique keys, in grouped order
group_nunique (groupable) – Number of unique values per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the dtype(s) of values array(s) does/do not support the nunique method
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
RuntimeError – Raised if nunique is not supported for the values dtype
Examples
>>> data = ak.array([3, 4, 3, 1, 1, 4, 3, 4, 1, 4]) >>> data array([3, 4, 3, 1, 1, 4, 3, 4, 1, 4]) >>> labels = ak.array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4]) >>> labels ak.array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4]) >>> g = ak.GroupBy(labels) >>> g.keys ak.array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4]) >>> g.nunique(data) array([1,2,3,4]), array([2, 2, 3, 1]) # Group (1,1,1) has values [3,4,3] -> there are 2 unique values 3&4 # Group (2,2,2) has values [1,1,4] -> 2 unique values 1&4 # Group (3,3,3) has values [3,4,1] -> 3 unique values # Group (4) has values [4] -> 1 unique value
- objType(*args, **kwargs)¶
str(object=’’) -> str str(bytes_or_buffer[, encoding[, errors]]) -> str
Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to ‘strict’.
- prod(values: pdarray, skipna: bool = True) Tuple[groupable, pdarray] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and compute the product of each group’s values.
- Parameters:
values (pdarray) – The values to group and multiply
skipna (bool) – boolean which determines if NANs should be skipped
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
group_products (pdarray, float64) – One product per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the values array is not a pdarray object
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
RuntimeError – Raised if prod is not supported for the values dtype
Notes
The return dtype is always float64.
Examples
>>> a = ak.randint(1,5,10) >>> a array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> g = ak.GroupBy(a) >>> g.keys array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> b = ak.randint(1,5,10) >>> b array([3, 3, 3, 4, 1, 1, 3, 3, 3, 4]) >>> g.prod(b) (array([2, 3, 4]), array([12, 108.00000000000003, 8.9999999999999982]))
- register(user_defined_name: str) GroupBy [source]¶
Register this GroupBy object and underlying components with the Arkouda server
- Parameters:
user_defined_name (str) – user defined name the GroupBy is to be registered under, this will be the root name for underlying components
- Returns:
The same GroupBy which is now registered with the arkouda server and has an updated name. This is an in-place modification, the original is returned to support a fluid programming style. Please note you cannot register two different GroupBys with the same name.
- Return type:
- Raises:
TypeError – Raised if user_defined_name is not a str
RegistrationError – If the server was unable to register the GroupBy with the user_defined_name
See also
unregister
,attach
,unregister_groupby_by_name
,is_registered
Notes
Objects registered with the server are immune to deletion until they are unregistered.
- sample(values: groupable, n=None, frac=None, replace=False, weights=None, random_state=None, return_indices=False, permute_samples=False)[source]¶
Return a random sample from each group. You can either specify the number of elements or the fraction of elements to be sampled. random_state can be used for reproducibility
- Parameters:
values ((list of) pdarray-like) – The values from which to sample, according to their group membership.
n (int, optional) – Number of items to return for each group. Cannot be used with frac and must be no larger than the smallest group unless replace is True. Default is one if frac is None.
frac (float, optional) – Fraction of items to return. Cannot be used with n.
replace (bool, default False) – Allow or disallow sampling of the value more than once.
weights (pdarray, optional) – Default None results in equal probability weighting. If passed a pdarray, then values must have the same length as the groupby keys and will be used as sampling probabilities after normalization within each group. Weights must be non-negative with at least one positive element within each group.
random_state (int or ak.random.Generator, optional) – If int, seed for random number generator. If ak.random.Generator, use as given.
return_indices (bool, default False) – if True, return the indices of the sampled values. Otherwise, return the sample values.
permute_samples (bool, default False) – if True, return permute the samples according to group Otherwise, keep samples in original order.
- Returns:
if return_indices is True, return the indices of the sampled values. Otherwise, return the sample values.
- Return type:
- size() Tuple[groupable, pdarray] [source]¶
Count the number of elements in each group, i.e. the number of times each key appears. This counts the total number of rows (including NaN values).
- Parameters:
none
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
counts (pdarray, int64) – The number of times each unique key appears
See also
Examples
>>> a = ak.randint(1,5,10) >>> a array([3, 2, 3, 1, 2, 4, 3, 4, 3, 4]) >>> g = ak.GroupBy(a) >>> keys,counts = g.size() >>> keys array([1, 2, 3, 4]) >>> counts array([1, 2, 4, 3])
- std(values: pdarray, skipna: bool = True, ddof: int_scalars = 1) Tuple[groupable, pdarray] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and compute the standard deviation of each group’s values.
- Parameters:
values (pdarray) – The values to group and find standard deviation
skipna (bool) – boolean which determines if NANs should be skipped
ddof (int_scalars) – “Delta Degrees of Freedom” used in calculating std
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
group_stds (pdarray, float64) – One std value per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the values array is not a pdarray object
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
Notes
The return dtype is always float64.
The standard deviation is the square root of the average of the squared deviations from the mean, i.e.,
std = sqrt(mean((x - x.mean())**2))
.The average squared deviation is normally calculated as
x.sum() / N
, whereN = len(x)
. If, however, ddof is specified, the divisorN - ddof
is used instead. In standard statistical practice,ddof=1
provides an unbiased estimator of the variance of the infinite population.ddof=0
provides a maximum likelihood estimate of the variance for normally distributed variables. The standard deviation computed in this function is the square root of the estimated variance, so even withddof=1
, it will not be an unbiased estimate of the standard deviation per se.Examples
>>> a = ak.randint(1,5,10) >>> a array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> g = ak.GroupBy(a) >>> g.keys array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> b = ak.randint(1,5,10) >>> b array([3, 3, 3, 4, 1, 1, 3, 3, 3, 4]) >>> g.std(b) (array([2 3 4]), array([1.5275252316519465 1.0954451150103321 0]))
- sum(values: pdarray, skipna: bool = True) Tuple[groupable, pdarray] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and sum each group’s values.
- Parameters:
values (pdarray) – The values to group and sum
skipna (bool) – boolean which determines if NANs should be skipped
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
group_sums (pdarray) – One sum per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the values array is not a pdarray object
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
Notes
The grouped sum of a boolean
pdarray
returns integers.Examples
>>> a = ak.randint(1,5,10) >>> a array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> g = ak.GroupBy(a) >>> g.keys array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> b = ak.randint(1,5,10) >>> b array([3, 3, 3, 4, 1, 1, 3, 3, 3, 4]) >>> g.sum(b) (array([2, 3, 4]), array([8, 14, 6]))
- tail(values: groupable_element_type, n: int = 5, return_indices: bool = True) Tuple[groupable, groupable_element_type] [source]¶
Return the last n values from each group.
- Parameters:
values ((list of) pdarray-like) – The values from which to select, according to their group membership.
n (int, optional, default = 5) – Maximum number of items to return for each group. If the number of values in a group is less than n, all the values from that group will be returned.
return_indices (bool, default False) – If True, return the indices of the sampled values. Otherwise, return the selected values.
- Returns:
unique_keys ((list of) pdarray-like) – The unique keys, in grouped order
result (pdarray-like) – The last n items of each group. If return_indices is True, the result are indices. O.W. the result are values.
Examples
>>> a = ak.arange(10) %3 >>> a array([0 1 2 0 1 2 0 1 2 0]) >>> v = ak.arange(10) >>> v array([0 1 2 3 4 5 6 7 8 9]) >>> g = GroupBy(a) >>> unique_keys, idx = g.tail(v, 2, return_indices=True) >>> _, values = g.tail(v, 2, return_indices=False) >>> unique_keys array([0 1 2]) >>> idx array([6 9 4 7 5 8]) >>> values array([6 9 4 7 5 8])
>>> v2 = -2 * ak.arange(10) >>> v2 array([0 -2 -4 -6 -8 -10 -12 -14 -16 -18]) >>> _, idx2 = g.tail(v2, 2, return_indices=True) >>> _, values2 = g.tail(v2, 2, return_indices=False) >>> idx2 array([6 9 4 7 5 8]) >>> values2 array([-12 -18 -8 -14 -10 -16])
- to_hdf(prefix_path, dataset='groupby', mode='truncate', file_type='distribute')[source]¶
Save the GroupBy to HDF5. The result is a collection of HDF5 files, one file per locale of the arkouda server, where each filename starts with prefix_path.
- Parameters:
prefix_path (str) – Directory and filename prefix that all output files will share
dataset (str) – Name prefix for saved data within the HDF5 file
mode (str {'truncate' | 'append'}) – By default, truncate (overwrite) output files, if they exist. If ‘append’, add data as a new column to existing files.
file_type (str ("single" | "distribute")) – Default: “distribute” When set to single, dataset is written to a single file. When distribute, dataset is written on a file per locale. This is only supported by HDF5 files and will have no impact of Parquet Files.
- Returns:
None
GroupBy is not currently supported by Parquet
- unique(values: groupable)[source]¶
Return the set of unique values in each group, as a SegArray.
- Parameters:
values ((list of) pdarray-like) – The values to unique
- Returns:
unique_keys ((list of) pdarray-like) – The unique keys, in grouped order
result ((list of) SegArray) – The unique values of each group
- Raises:
TypeError – Raised if values is or contains Strings or Categorical
- unregister()[source]¶
Unregister this GroupBy object in the arkouda server which was previously registered using register() and/or attached to using attach()
- Raises:
RegistrationError – If the object is already unregistered or if there is a server error when attempting to unregister
See also
Notes
Objects registered with the server are immune to deletion until they are unregistered.
- unregister_groupby_by_name(user_defined_name: str) None [source]¶
Function to unregister GroupBy object by name which was registered with the arkouda server via register()
- Parameters:
user_defined_name (str) – Name under which the GroupBy object was registered
- Raises:
TypeError – if user_defined_name is not a string
RegistrationError – if there is an issue attempting to unregister any underlying components
See also
- var(values: pdarray, skipna: bool = True, ddof: int_scalars = 1) Tuple[groupable, pdarray] [source]¶
Using the permutation stored in the GroupBy instance, group another array of values and compute the variance of each group’s values.
- Parameters:
values (pdarray) – The values to group and find variance
skipna (bool) – boolean which determines if NANs should be skipped
ddof (int_scalars) – “Delta Degrees of Freedom” used in calculating var
- Returns:
unique_keys ((list of) pdarray or Strings) – The unique keys, in grouped order
group_vars (pdarray, float64) – One var value per unique key in the GroupBy instance
- Raises:
TypeError – Raised if the values array is not a pdarray object
ValueError – Raised if the key array size does not match the values size or if the operator is not in the GroupBy.Reductions array
Notes
The return dtype is always float64.
The variance is the average of the squared deviations from the mean, i.e.,
var = mean((x - x.mean())**2)
.The mean is normally calculated as
x.sum() / N
, whereN = len(x)
. If, however, ddof is specified, the divisorN - ddof
is used instead. In standard statistical practice,ddof=1
provides an unbiased estimator of the variance of a hypothetical infinite population.ddof=0
provides a maximum likelihood estimate of the variance for normally distributed variables.Examples
>>> a = ak.randint(1,5,10) >>> a array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> g = ak.GroupBy(a) >>> g.keys array([3, 3, 4, 3, 3, 2, 3, 2, 4, 2]) >>> b = ak.randint(1,5,10) >>> b array([3, 3, 3, 4, 1, 1, 3, 3, 3, 4]) >>> g.var(b) (array([2 3 4]), array([2.333333333333333 1.2 0]))
- arkouda.groupbyclass.broadcast(segments: pdarray, values: pdarray | Strings, size: int | np.int64 | np.uint64 = -1, permutation: pdarray | None = None)[source]¶
Broadcast a dense column vector to the rows of a sparse matrix or grouped array.
- Parameters:
segments (pdarray, int64) – Offsets of the start of each row in the sparse matrix or grouped array. Must be sorted in ascending order.
values (pdarray, Strings) – The values to broadcast, one per row (or group)
size (int) – The total number of nonzeros in the matrix. If permutation is given, this argument is ignored and the size is inferred from the permutation array.
permutation (pdarray, int64) – The permutation to go from the original ordering of nonzeros to the ordering grouped by row. To broadcast values back to the original ordering, this permutation will be inverted. If no permutation is supplied, it is assumed that the original nonzeros were already grouped by row. In this case, the size argument must be given.
- Returns:
The broadcast values, one per nonzero
- Return type:
- Raises:
ValueError –
If segments and values are different sizes
If segments are empty
If number of nonzeros (either user-specified or inferred from permutation) is less than one
Examples
>>> # Define a sparse matrix with 3 rows and 7 nonzeros >>> row_starts = ak.array([0, 2, 5]) >>> nnz = 7 # Broadcast the row number to each nonzero element >>> row_number = ak.arange(3) >>> ak.broadcast(row_starts, row_number, nnz) array([0 0 1 1 1 2 2]) # If the original nonzeros were in reverse order... >>> permutation = ak.arange(6, -1, -1) >>> ak.broadcast(row_starts, row_number, permutation=permutation) array([2 2 1 1 1 0 0])
- arkouda.groupbyclass.unique(pda: groupable, return_groups: bool = False, assume_sorted: bool = False, return_indices: bool = False) groupable | Tuple[groupable, pdarray, pdarray, int] [source]¶
Find the unique elements of an array.
Returns the unique elements of an array, sorted if the values are integers. There is an optional output in addition to the unique elements: the number of times each unique value comes up in the input array.
- Parameters:
pda ((list of) pdarray, Strings, or Categorical) – Input array.
return_groups (bool, optional) – If True, also return grouping information for the array.
assume_sorted (bool, optional) – If True, assume pda is sorted and skip sorting step
return_indices (bool, optional) – Only applicable if return_groups is True. If True, return unique key indices along with other groups
- Returns:
unique ((list of) pdarray, Strings, or Categorical) – The unique values. If input dtype is int64, return values will be sorted.
permutation (pdarray, optional) – Permutation that groups equivalent values together (only when return_groups=True)
segments (pdarray, optional) – The offset of each group in the permuted array (only when return_groups=True)
- Raises:
TypeError – Raised if pda is not a pdarray or Strings object
RuntimeError – Raised if the pdarray or Strings dtype is unsupported
Notes
For integer arrays, this function checks to see whether pda is sorted and, if so, whether it is already unique. This step can save considerable computation. Otherwise, this function will sort pda.
Examples
>>> A = ak.array([3, 2, 1, 1, 2, 3]) >>> ak.unique(A) array([1, 2, 3])