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

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

Сообщение Anonymous »

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


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

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