PYTHONL Telegram 5162
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Pandas трюк: ускоряем группировки с map вместо merge_groupby

Когда нужно добавить агрегированные значения (например, среднее по группе) обратно в исходный DataFrame, большинство разработчиков делают groupby().transform() или merge().
Но есть менее известный способ — использовать map() после groupby().mean(), который в некоторых случаях работает в 2–3 раза быстрее и требует меньше памяти.

Фокус в том, что groupby().mean() создаёт компактный Series, где индекс — это категория, а значения — результат агрегации.
А map() просто подставляет их обратно в исходный DataFrame без тяжёлого join.


import pandas as pd
import numpy as np

# пример данных
N = 5_000_000
df = pd.DataFrame({
"group": np.random.choice(["A", "B", "C", "D"], N),
"value": np.random.randn(N)
})

# классический подход
df["mean_value_merge"] = df["group"].map(df.groupby("group")["value"].mean())

# сравнение с transform
df["mean_value_transform"] = df.groupby("group")["value"].transform("mean")

# идентичность результата
print(df["mean_value_merge"].equals(df["mean_value_transform"]))


Это особенно полезно на миллионах строк, когда transform начинает “проседать”.
Метод даёт тот же результат, но заметно экономнее по CPU и RAM.

@pythonl
14🔥10👍4



tgoop.com/pythonl/5162
Create:
Last Update:

🔥 Pandas трюк: ускоряем группировки с map вместо merge_groupby

Когда нужно добавить агрегированные значения (например, среднее по группе) обратно в исходный DataFrame, большинство разработчиков делают groupby().transform() или merge().
Но есть менее известный способ — использовать map() после groupby().mean(), который в некоторых случаях работает в 2–3 раза быстрее и требует меньше памяти.

Фокус в том, что groupby().mean() создаёт компактный Series, где индекс — это категория, а значения — результат агрегации.
А map() просто подставляет их обратно в исходный DataFrame без тяжёлого join.


import pandas as pd
import numpy as np

# пример данных
N = 5_000_000
df = pd.DataFrame({
"group": np.random.choice(["A", "B", "C", "D"], N),
"value": np.random.randn(N)
})

# классический подход
df["mean_value_merge"] = df["group"].map(df.groupby("group")["value"].mean())

# сравнение с transform
df["mean_value_transform"] = df.groupby("group")["value"].transform("mean")

# идентичность результата
print(df["mean_value_merge"].equals(df["mean_value_transform"]))


Это особенно полезно на миллионах строк, когда transform начинает “проседать”.
Метод даёт тот же результат, но заметно экономнее по CPU и RAM.

@pythonl

BY Python/ django


Share with your friend now:
tgoop.com/pythonl/5162

View MORE
Open in Telegram


Telegram News

Date: |

A new window will come up. Enter your channel name and bio. (See the character limits above.) Click “Create.” As five out of seven counts were serious, Hui sentenced Ng to six years and six months in jail. SUCK Channel Telegram Each account can create up to 10 public channels Telegram is a leading cloud-based instant messages platform. It became popular in recent years for its privacy, speed, voice and video quality, and other unmatched features over its main competitor Whatsapp.
from us


Telegram Python/ django
FROM American