pandas.DataFrame.groupby#
Група DataFrame використовує mapper or by Series of columns.
Групавикористання involves є деяка комбінація сплутування об'єкта, використовуючи функцію, і поєднання результатів. Це може бути використане для груп великих обсягів даних і комп'ютерних операцій на цих групах.
Parameters: by mapping, function, label, pd.Grouper or list of such
Використовується для визначення груп для груп. If by is a function, it's called on each value of the object's index. Якщо dict or Series is pased, the Series or dict VALUES will be used to determine the groups (the Series' values are first aligned; see .align() method). Якщо аркуш або рамка розміру еквівалента до вибраного шипа є пропорційним (див. Групуяк User Guide), значення є використані як визначить Групи. Натисніть на електронну пошту або написи літер, які можуть бути прописані в групу з columns in self . Notice that a tuple is interpreted as a (single) key.
Split along rows (0) or columns (1). Для серії цей параметр є unused і defaults до 0.
Deprecated since version 2.1.0: Will be removed and behave like axis=0 in future version. For axis=1 , do frame.T.groupby(. ) instead.
Якщо axis є MultiIndex (hierarchical), group by a particular level or levels. Do not specify both by and level.
as_index bool, default True
Return object with group labels as the index. Тільки відповідний для DataFrame input. as_index=False is effectively “SQL-style” grouped output. Цей argument не впливає на filtrations (see the filtrations in the user guide), such as head() , tail() , nth() and in transformations (see the transformations in the user guide).
sort bool, default True
Sort group keys. Get better performance by turning this off. Зауважте, що це не впливає на ордени observations witheach group. Groupby preserves order of rows within each group. Якщо False, групи будуть відображатися в тій самій ордері, як їх діти в original DataFrame.Цей argument не впливає на filtrations (see the filtrations in the user guide), such as head() , tail() , nth() and in transformations (see the transformations in the user guide).
Changed in version 2.0.0: Specifying sort=False with ordered categorical grouper не буде longer sort the values.
Якщо ви кажете, що apply and the by argument produces a like-indexed (i.e. a transform ) result, add group keys to index to identify pieces. Дефектні групи кнопок не включаються, коли результати index (і column) мітки збираються ввести, і included іншіwise.
Відмінний у версії 1.5.0: Warns, що group_keys не буде тривалий час, щоб не було ignorовано, коли результат від apply є як-indexed Series or DataFrame. Specify group_keys explicitly include the group keys or not.
Changed in version 2.0.0: group_keys now defaults to True .
Це тільки applies if any of the groupers є категорії. If True: тільки показують значення для категоричних груп. If False: show all values for categorical groupers.
Попередній випадок версії 2.1.0: Зменшення значення буде змінюватися на True in a future version of pandas.
Якщо вірно, і якщо групи кнопок містять NA-values, NA-values допоміжно з рядком/колом буде забито. Якщо False, NA величини буде також treated as the key in groups.
Поверніть групудля об'єкта, що містить інформацію про групи.
Настанова метод для frequency conversion і resampling of time series.
Натисніть на user guide for more detailed usage and examples, including splitting an object ingroups, iterating through groups, selecting a group, aggregation, and more.
>>> df = pd.DataFrame('Animal': ['Falcon', 'Falcon', . 'Parrot', 'Parrot'], . 'Max Speed': [380., 370., 24., 26.]>) >>> df Animal Max Speed 0 Falcon 380.0 1 Falcon 370.0 2 Parrot 24.0 3 Parrot 26.0 >>> df.groupby(['Animal']).mean() Max Speed Animal Falcon 375.0 Parrot 25.0
Hierarchical Indexes
We can groupby different levels of hierarchical index using the level parameter:
>>> arrays = [['Falcon', 'Falcon', 'Parrot', 'Parrot'], . ['Captive', 'Wild', 'Captive', 'Wild']] >>> index = pd.MultiIndex.from_arrays(arrays, names=('Animal', 'Type')) >>> df = pd.DataFrame('Max Speed': [390., 350., 30., 20.]>, . index=index) >>> df Max Speed Animal Type Falcon Captive 390.0 Wild 350.0 Parrot Captive 30.0 Wild 20.0 >>> df.groupby(level=0).mean() Max Speed Animal Falcon 370.0 Parrot 25.0 >>> df.groupby(level="Type").mean() Max Speed Type Captive 210.0 Wild 185.0
Ви можете також включити NA в групових кнопках або не встановлювати параметр натискання кнопки, в той час як налаштування неправильно .
>>> l = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]] >>> df = pd.DataFrame(l, columns=["a", "b", "c"])
>>> df.groupby(by=["b"]).sum() a c b 1.0 2 3 2.0 2 5
>>> df.groupby(by=["b"], dropna=False).sum() a c b 1.0 2 3 2.0 2 5 NaN 1 4
>>> l = [["a", 12, 12], [None, 12.3, 33.], ["b", 12.3, 123], ["a", 1, 1]] >>> df = pd.DataFrame(l, columns=["a", "b", "c"])
>>> df.groupby(by="a").sum() b c a a 13.0 13.0 b 12.3 123.0
>>> df.groupby(by="a", dropna=False).sum() b c a a 13.0 13.0 b 12.3 123.0 NaN 12.3 33.0
Якщо ви використовуєте .apply() , use group_keys для включення або exclude group keys. The group_keys argument defaults до True (include).
>>> df = pd.DataFrame('Animal': ['Falcon', 'Falcon', . 'Parrot', 'Parrot'], . 'Max Speed': [380., 370., 24., 26.]>) >>> df.groupby("Animal", group_keys=True)[['Max Speed']].apply(lambda x: x) Max Speed Animal Falcon 0 380.0 1 370.0 Parrot 2 24.0 3 26.0
>>> df.groupby("Animal", group_keys=False)[['Max Speed']].apply(lambda x: x) Max Speed 0 380.0 1 370.0 2 24.0 3 26.0
Сегментація даних за критеріями та отримання агрегованих результатів у Pandas
Угруповання даних — один із важливих етапів аналізу даних, який дозволяє зібрати інформацію та отримати статистику на основі різних критеріїв. Розглянемо основи методу groupby() і як його застосовувати для агрегації даних по групах Python, з використанням бібліотеки Pandas.
Навіщо потрібне угруповання даних
Угруповання даних - це процес поділу набору даних на дрібніші групи на основі якихось категорій або критеріїв. Це може бути корисним, наприклад, для аналізу продажів за категоріями товарів, статистики по регіонах або оцінки продуктивності співробітників по відділах.Угруповання дозволяє нам легко отримувати узагальнену інформацію з великих обсягів даних і робить аналіз зручнішим та інформативнішим.
Основи методу groupby()
Pandas метод groupby() є потужним інструментом для групування даних. Він дозволяє розділити DataFrame на групи на основі значень в одному або кількох шпальтах. Ось як він працює:
import pandas as pd data = < 'Category': ['A', 'B', 'A', 'B', 'A'], 'Sales': [100, 150, 200, 250, 300] >df = pd.DataFrame(data) grouped = df.groupby('Category')
У цьому прикладі ми створюємо DataFrame з двома стовпцями: Category та Sales. Потім ми використовуємо метод groupby('Category'), щоб згрупувати дані по стовпцю Category. У результаті з'являється об'єкт GroupBy , який містить групи даних, розділені за унікальними значеннями в стовпці Category .
Агрегація даних по групам
Після угруповання даних, ми можемо застосовувати функції, що агрегують, до кожної групи. Наприклад, давайте знайдемо суму продажів для кожної категорії:
sum_sales = grouped['Sales'].sum() print(sum_sales) # Category # A 600 # B 400 # Name: Sales, dtype: int64
У цьому випадку ми звертаємося до стовпця Sales та застосовуємо функцію sum() до кожної групи даних. Результат буде представлено у вигляді нового DataFrame.
Приклади угруповання даних та агрегації
Приклад 1: Угруповання по кількох стовпцях.
Іноді потрібно групувати дані щодо кількох стовпців. Припустимо, у нас є дані про продаж товарів із зазначенням категорії та регіону:
data = < 'Category': ['A', 'B', 'A', 'B', 'A'], 'Region': ['North', 'South', 'North', 'South', 'North'], 'Sales': [100, 150, 200, 250, 300] >df = pd.DataFrame(data)
Ми можемо групувати дані по обох стовпцях Category та Region та знаходити суму продажів для кожної комбінації:
grouped = df.groupby(['Category', 'Region']) sum_sales = grouped['Sales'].sum() print(sum_sales) # Category Region # A North 600 # B South 400 # Name: Sales, dtype: int64
Приклад 2: Використання різних агрегуючих функцій
Ви можете використовувати різні функції, що агрегують, до різних стовпців даних. Наприклад, знайдемо суму продажів та середнє значення продажів за кожною категорією:
agg_result = grouped.agg() print(agg_result) # Sales # Category Region # A North 200.0 # B South 200.0
Тут ми використовуємо метод agg() і вказуємо різні функції стовпця Sales .
Приклад 3: Використання функцій користувача
Іноді вам можуть знадобитися складніші агреговані значення, які не представлені вбудованими функціями. Ви можете визначити власні функції та застосовувати їх за допомогою agg() :
def custom_function(series): return series.max() - series.min() agg_result = grouped.agg()
Тут ми визначили функцію користувача custom_function() , яка знаходить різницю між максимальним і мінімальним значеннями в стовпці Sales для кожної групи.
Висновок
Угруповання даних та агрегація – важливі інструменти в аналізі даних. Метод groupby() у Pandas дозволяє легко згрупувати дані за різними критеріями та застосовувати агрегуючі функції для обчислення статистики. Це допомагає аналітикам та дослідникам даних робити інформовані висновки на основі узагальнених даних.
Різні ситуації з угрупованнями в pandas, приклади зі StackOverflow
Варто зазначити, що у випадку з груповими операціями, та й взагалі в pandas часто швидше (а також простіше для розуміння) писати докладніший код, а не скорочувати.
Зміст:
- Базове угруповання за допомогою GroupBy.apply();
- Вилучення даних окремої групи;
- Застосування GroupBy.apply() до різних елементів групи;
- Заміна деяких значень середнім значенням решти групи;
- Сортування груп за агрегованими даними;
- Створення кількох стовпців з агрегованими даними;
- Створення додаткового стовпця з кількістю груп у DataFrame;
- Зміщення значень у стовпці для груп на основі індексу;
- Вибір рядка з максимальним значенням із кожної групи;
- Угруповання, подібне itertools.groupby() в Python;
- Збираємо проміжні значення під час reduce();
- Зберігаємо інші стовпці при використанні min() з GroupBy.
Базове угруповання за допомогою GroupBy.apply() :
На відміну від DataFrame.agg() , об'єкту, що викликається, методу GroupBy.apply() передається суб- DataFrame , який дає доступ до всіх вихідних стовпців.
>>> import pandas as pd df = pd.DataFrame( "animal": "cat dog cat fish dog cat cat".split(), "size": list("SSMMMLL"), "weight": [8, 10, 11, 1, 20, 12, 12], "adult": [False] * 5 + [True] * 2, > ) >>> df # animal size weight adult # 0 cat S 8 False # 1 dog S 10 False # 2 cat M 11 False # 3 fish M 1 False # 4 dog M 20 False # 5 cat L 12 True # 6 cat L 12 True розмір тварин з найбільшою вагою. >>> df.groupby("animal").apply(lambda df: df["size"][df["weight"].idxmax()], include_groups=False) # animal # cat L # dog M # fish M # dtype: object
Вилучення даних окремої групи.
# вихідні дані дивимося вище # тут отримуємо об'єкт угруповання >>> grby = df.groupby("animal") # тепер з об'єкта угруповання просто вибираємо потрібну групу >>> grby.get_group("cat") # animal size weight adult # 0 cat S 8 False # 2 cat M 11 False # 5 cat L 12 True # 6 cat L 12 True
Застосування GroupBy.apply() до різних елементів у групі
# вихідні дані дивимося вище, об'єкт # угруповання `grby` отримали у попередньому прикладі # Визначимо функцію def grow_up(x): avg_weight = sum(x[x["size"] == "S"].weight * 1.5) avg_weight += sum(x[x["size"] == "M"].weight * 1.25) avg_weight += sum(x[x["size"] == "L"].weight) avg_weight /= len(x) return pd.Series(["L", avg_weight, True], index=["size", "weight", "adult"]) # застосовуємо функцію `grow_up` >>> expected_df = grby.apply(grow_up, include_groups=False) >>> expected_df # size weight adult # animal # cat L 12.4375 True # dog L 20.0000 True # fish L 1.2500 True
Заміна деяких значень середнім значенням решти групи
>>> df = pd.DataFrame("A": [1, 1, 2, 2], "B": [1, -1, 1, 2]>) >>> df # A B # 0 1 1 # 1 1 -1 # 2 2 1 # 3 2 2 def replace(g): "Підрахунок `mean` у групі" mask = g 0 # оператор `~` - логічне заперечення отри return g.where(~mask, g[~mask].mean()) # отримуємо об'єкт угруповання за # стовпцю `A` (він пішов в індекс) >>> grby = df.groupby("A") # застосовуємо функцію `replace` # до решти групи >>> grby.transform(replace) # B # 0 1 # 1 1 # 2 1 # 3 2
Сортування груп за агрегованими даними
df = pd.DataFrame( "code": ["foo", "bar", "baz"] * 2, "data": [0.16, -0.21, 0.33, 0.45, -0.59, 0.62], "flag": [False, True] * 3, > ) >>> df # code data flag # 0 foo 0.16 False # 1 bar -0.21 True # 2 baz 0.33 False # 3 foo 0.45 True # 4 bar -0.59 False # 5 baz 0.62 True # отримуємо об'єкт угруповання >>> code_groups = df.groupby("code") # сортуємо стовпець `data` по `sum()` у групах стовпця `code` >>> agg_n_sort_order = code_groups[["data"]].transform("sum").sort_values(by="data") >>> agg_n_sort_order # data # 1 -0.80 # 4 -0.80 # 0 0.61 # 3 0.61 # 2 0.95 # 5 0.95 # вирівнюємо дані щодо індексу сортування >>> sorted_df = df.loc[agg_n_sort_order.index] >>> sorted_df # code data flag # 1 bar -0.21 True # 4 bar -0.59 False # 0 foo 0.16 False # 3 foo 0.45 True # 2 baz 0.33 False # 5 baz 0.62 True
Створення кількох стовпців з агрегованими даними
# Створимо індекс `rng` >>> rng = pd.date_range(start="2014-10-07", periods=10, freq="2min") # створимо серію з індексом `rng` >>> ts = pd.Series(data=list(range(10)), index=rng) >>> ts # 2014-10-07 00:00:00 0 # 2014-10-07 00:02:00 1 # 2014-10-07 00:04:00 2 # 2014-10-07 00:06:00 3 # 2014-10-07 00:08:00 4 # 2014-10-07 00:10:00 5 # 2014-10-07 00:12:00 6 # 2014-10-07 00:14:00 7 # 2014-10-07 00:16:00 8 # 2014-10-07 00:18:00 9 # Freq: 2min, dtype: int64 def mycust(x): if len(x) > 2: return x.iloc[1] * 1.234 return pd.NaT словник з іменами підсумкових стовпців # та ім'ям застосовуваної функції >>> mhc = "Mean": "mean", "Max": "max", "Custom": mycust> # робимо повторну вибірку із застосуванням функцій >>> ts.resample("5min").apply(mhc) # Mean Max Custom # 2014-10-07 00:00:00 1.0 2 1.234 # 2014-10-07 00:05:00 3.5 4 NaT # 2014-10-07 00:10:00 6.0 7 7.404 # 2014-10-07 00:15:00 8.5 9 NaT
Створення додаткового стовпця з кількістю груп у DataFrame.
df = pd.DataFrame( "Color": "Red Red Red Blue".split(), "Value": [100, 150, 50, 50]> ) >>> df # Color Value # 0 Red 100 # 1 Red 150 # 2 Red 50 # 3 Blue 50 # Тут все просто, `DataFrame` # присвоюється новий стовпець >>> df["Counts"] = df.groupby(["Color"]).transform(len) >>> df # Color Value Counts # 0 Red 100 3 # 1 Red 150 3 # 2 Red 50 3 # 3 Blue 50 1
Зміщення значень у стовпці для груп на основі індексу
df = pd.DataFrame( "line_race": [10, 10, 8, 10, 10, 8], "beyer": [99, 102, 103, 103, 88, 100]>, index=[ "Last Gunfighter", "Last Gunfighter", "Last Gunfighter", "Paynter", "Paynter", "Paynter", ], ) >>> df # line_race beyer # Last Gunfighter 10 99 # Last Gunfighter 10 102 # Last Gunfighter 8 103 # Paynter 10 103 # Paynter 10 88 # Paynter 8 100 # Створюємо стовпець зі зміщенням значення зі стовпця `beyer` # на одне значення вниз ДЛЯ КОЖНОЇ ГРУПИ >>> df["beyer_shifted"] = df.groupby(level=0)["beyer"].shift(1) >>> df # line_race beyer beyer_shifted # Last Gunfighter 10 99 NaN # Last Gunfighter 10 102 99.0 # Last Gunfighter 8 103 102.0 # Paynter 10 103 NaN # Paynter 10 88 103.0 # Paynter 8 100 88.0
Вибір рядка з максимальним значенням кожної групи
df = pd.DataFrame( "host": ["other", "other", "that", "this", "this"], "service": ["mail", "web", "mail", "mail", "web"], "no": [1, 2, 1, 3, 2], > ).set_index(["host", "service"]) >>> df # no # host service # other mail 1 # web 2 # that mail 1 # this mail 3 # web 2 # групуємо та шукаємо індекс з максимальним значенням >>> mask = df.groupby(level=0).agg("idxmax") >>> mask # no # host # other (other, web) # that (that, mail) # this (this, mail) # вирівнюємо дані по `mask` >>> df_count = df.loc[mask["no"]].reset_index() >>> df_count # host service no # 0 other web 2 # 1 that mail 1 # 2 this mail 3
Угруповання, подібне до itertools.groupby() в Python
>>> df = pd.DataFrame([0, 1, 0, 1, 1, 1, 0, 1, 1], columns=["A"]) >>> df # A # 0 0 # 1 1 # 2 0 # 3 1 # 4 1 # 5 1 # 6 0 # 7 1 # 8 1 >>> df["A"].groupby((df["A"] != df["A"].shift()).cumsum()).groups # >>> df["A"].groupby((df["A"] != df["A"].shift()).cumsum()).cumsum() # 0 0 # 1 1 # 2 0 # 3 1 # 4 2 # 5 3 # 6 0 # 7 1 # 8 2 # Name: A, dtype: int64
Збираємо проміжні значення під час reduce()
Функція, яка робить те саме, що і functools.reduce() , за винятком того, що обчислення збирається під час functools.reduce() . Тобто повертає послідовність усіх проміжних значень.
>>> s = pd.Series([i / 100.0 for i in range(1, 11)]) >>> s # 0 0.01 # 1 0.02 # 2 0.03 # 3 0.04 # 4 0.05 # 5 0.06 # 6 0.07 # 7 0.08 # 8 0.09 # 9 0.10 # dtype: float64 функцію для збору # проміжних значень def cum_ret(x, y): return x * (1 + y) # функція з `reduce` def red(x): return functools.reduce(cum_ret, x, 1.0) # застосуємо її при розрахунок вікна, що розширюється >>> s.expanding().apply(red, raw=True) # 0 1.010000 # 1 1.030200 # 2 1.061106 # 3 1.103550 # 4 1.158728 # 5 1.228251 # 6 1.314229 # 7 1.419367 # 8 1.547110 # 9 1.701821 # dtype: float64
Зберігаємо інші стовпці при використанні min() з GroupBy
df = pd.DataFrame( "AAA": [1, 1, 1, 2, 2, 2, 3, 3], "BBB": [2, 1, 3, 4, 5, 1, 2, 3]> ) >>> df # AAA BBB # 0 1 2 # 1 1 1 # 2 1 3 # 3 2 4 # 4 2 5 # 5 2 1 # 6 3 2 # 7 3 3
Варіант 1. GroupBy.idxmin() для отримання індексу мінімумів
>>> df.loc[df.groupby("AAA")["BBB"].idxmin()] # AAA BBB # 1 1 1 # 5 2 1 # 6 3 2
Варіант 2 Сортуємо, а потім беремо перше значення з кожної групи
>>> df.sort_values(by="BBB").groupby("AAA", as_index=False).first() # AAA BBB # 0 1 1 # 1 2 1 # 2 3 2
- КОРОТКИЙ ОГЛЯД МАТЕРІАЛУ.
- Об'єкт DataFrame модуля pandas
- Об'єкт Series модуля pandas
- Об'єкт Index модуля pandas
- Об'єкт MultiIndex модуля pandas
- Логічна індексація у pandas
- Використання регулярних виразів у Pandas
- Відбір та фільтрація даних у Pandas
- Методи ітерації щодо об'єктів pandas
- Аналіз логів Nginx модулем pandas
- Порівняння pandas з SQL
- Властивості .loc[], .iloc[] об'єктів Series/DataFrame в pandas
- Метод .truncate() об'єктів Series/DataFrame в pandas
- Метод .take() об'єктів DataFrame/Series/Index в pandas
- Метод Series.between() модуля pandas
- Метод .between_time() об'єктів DataFrame/Series у pandas
- Методи pandas для роботи з None та NaN у DataFrame/Series
- Метод .interpolate() об'єктів Series/DataFrame в pandas
- Методи .duplicated() та .drop_duplicates() об'єктів DataFrame/Series в pandas
- Метод .sort_values() та .sort_index() об'єктів Series/DataFrame в pandas
- Метод .value_counts() об'єктів DataFrame/Series у pandas
- Методи .nsmallest() і .nlargest() об'єктів Series/DataFrame в pandas
- Метод DataFrame.query() модуля pandas
- Методи .apply() та .map() об'єктів DataFrame/Series у pandas
- Метод .isin() об'єктів DataFrame/Series в pandas
- Метод DataFrame.assign() модуля pandas
- Метод DataFrame.insert() модуля pandas
- Методи .mask() і .where() об'єктів Series/DataFrame в pandas
- Метод .groupby() об'єктів DataFrame/Series у pandas
- Клас Grouper() модуля pandas
- Метод .transform() об'єктів DataFrame/DataFrameGroupBy в pandas
- Метод .aggregate() об'єктів Series/DataFrame в pandas
- Метод DataFrame.join() в pandas, об'єднання DataFrame
- Метод DataFrame.merge() в pandas, злиття у стилі БД
- Функція concat() бібліотеки pandas
- Метод DataFrame.set_index() в pandas
- Методи .all() і .any() об'єктів Series/DataFrame в pandas
- Метод .resample() об'єктів Series/DataFrame в pandas
- Метод .reindex() об'єктів Series/DataFrame в pandas
- Метод .drop() об'єктів Series/DataFrame в pandas
- Метод DataFrame.set_axis() в pandas
- Методи .rename() і .rename_axis() об'єктів Series/DataFrame в pandas
- Метод .reset_index() об'єктів Series/DataFrame в pandas
- Універсальний метод .replace() об'єктів Series/DataFrame в pandas
- Методи рядків об'єктів Series/Index у pandas, об'єкт Series.str
- Доступ до методів datetime об'єктів Series/index в pandas
- Псевдоніми періодів тимчасових рядів pandas
- Методи pivot() та pivot_table() об'єкта DataFrame в pandas
- Методи .stack() та .unstack() об'єкта DataFrame в pandas
- Функція melt() та wide_to_long() модуля pandas
- Функція get_dummies() та from_dummies() модуля pandas
- Метод .explode() об'єктів Series/DataFrame в pandas
- Функція crosstab() модуля pandas
- Функція модуля factorize() pandas
- Функція cut() модуля pandas, інтервали для угруповання
- Метод DataFrame.rolling() модуля pandas
- Метод DataFrame.expanding() модуля pandas
- Об'єкти Timestamp і DatetimeIndex в pandas
- Функція to_datetime() модуля pandas
- Функція date_range() модуля pandas
- Об'єкти Categorical і CategoricalIndex модуля pandas
- Об'єкти Interval та IntervalIndex модуля pandas
- Функція interval_range() модуля pandas
- Об'єкти Period та PeriodIndex модуля pandas
- Метод to_period() об'єктів DatetimeIndex/DataFrame/Series в pandas
- Функція period_range() модуля pandas
- Об'єкт RangeIndex модуля pandas
- Функція read_csv() модуля pandas
- Створення DataFrame з декількох CSV файлів в pandas
- Читання файлів зі стовпцями фіксованої ширини в pandas
- Метод DataFrame.to_csv() модуля pandas
- Функція read_excel() модуля pandas
- Метод DataFrame.to_excel() модуля pandas
- Функція read_sql() модуля pandas
- Метод DataFrame.to_sql() модуля pandas
- Приклади групових операцій на pandas зі StackOverflow
- Метод round() об'єктів Series/DataFrame в pandas
- Функція to_numeric() модуля pandas
- Метод .compare() об'єктів Series/DataFrame в pandas
- Метод .align() об'єктів Series/DataFrame в pandas
- Polars швидка бібліотека DataFrame для Python
- Пакет FireDucks, швидкий та повністю сумісний з API pandas
