Как сохранить группировку столбцов в Pandas без хрупких обходных путейPython

Программы на Python
Ответить
Anonymous
 Как сохранить группировку столбцов в Pandas без хрупких обходных путей

Сообщение Anonymous »

Я пытаюсь понять новое поведение .groupby в pandas
Моя жалоба двоякая:
  • что .groupby не позволяет вам получить доступ к столбцам, которые вы сгруппировали по имени, если вы не сделаете что-то хрупкое, например group.name[0]
  • Это когда набор данных снова собирается с помощью .apply, группирующие столбцы — это индексы, которые нужно вернуть в данные в виде столбцов с помощью .rest_index()!
Этот дизайн кажется настолько сомнительным, что я могу только заключить, что делаю что-то неправильно. Мне кажется, что большинство людей не хотят, чтобы группирующие столбцы были исключены из их анализа! Напротив, операция группировки подразумевает важность.
Как сохранить эти столбцы группировки без хрупких обходных путей? Решение должно быть собственным для pandas и должно быть предусмотренной функцией API.
В заключение отметим, что группировка здесь может не потребоваться. Это просто игрушечный пример.


import pandas as pd
import numpy as np

print("pandas version:", pd.__version__)
#pandas version: 3.0.1
print("numpy version:", np.__version__)
#numpy version: 2.4.2

rng = np.random.default_rng(5)

df = pd.DataFrame({
"group1": ["a", "a", "b", "b", "b"],
"group2": ["X", "X", "Y", "Y", "Y"],
"value": [1, 2, 3, 4, 5]
})

# Step 1: create a flag column inside groupby.apply
df2 = (
df
.groupby(["group1", "group2"], group_keys=True)
.apply(lambda g: g.assign(
flag=lambda df: (
False if g.name[0] == "a" else ~(rng.random(len(g)) < 0.5)
)
))
.reset_index()
)

df2

group1 group2 level_2 value flag
0 a X 0 1 False
1 a X 1 2 False
2 b Y 2 3 True
3 b Y 3 4 True
4 b Y 4 5 True
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»