Моя жалоба двоякая:
- что .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
Мобильная версия