Ответ 1
gb = df.groupby('ZZ')
[gb.get_group(x) for x in gb.groups]
Я хочу разбить следующий фрейм данных на основе столбца ZZ
df =
N0_YLDF ZZ MAT
0 6.286333 2 11.669069
1 6.317000 6 11.669069
2 6.324889 6 11.516454
3 6.320667 5 11.516454
4 6.325556 5 11.516454
5 6.359000 6 11.516454
6 6.359000 6 11.516454
7 6.361111 7 11.516454
8 6.360778 7 11.516454
9 6.361111 6 11.516454
Как вывод, я хочу, чтобы новый фреймворк с столбцом "N0_YLDF" разбился на 4, один новый столбец для каждого уникального значения ZZ. Как мне это сделать? Я могу делать groupby, но не знаю, что делать с сгруппированным объектом.
gb = df.groupby('ZZ')
[gb.get_group(x) for x in gb.groups]
Есть другая альтернатива, так как groupby возвращает генератор, который мы можем просто использовать для понимания списка, чтобы получить 2-е значение (фрейм).
dfs = [x for _, x in df.groupby('ZZ')]
В R существует метод dataframe, называемый split. Это для всех пользователей R:
def split(df, group):
gb = df.groupby(group)
return [gb.get_group(x) for x in gb.groups]
Храните их в формате dict
, который позволяет вам получить доступ к группе DataFrames на основе ключей группы.
d = dict(tuple(df.groupby('ZZ')))
d[6]
# N0_YLDF ZZ MAT
#1 6.317000 6 11.669069
#2 6.324889 6 11.516454
#5 6.359000 6 11.516454
#6 6.359000 6 11.516454
#9 6.361111 6 11.516454
Если вам нужна только подмножество DataFrame, в данном случае только серия 'NO_YLDF'
, вы можете изменить понимание слова.
d = dict((idx, gp['N0_YLDF']) for idx, gp in df.groupby('ZZ'))
d[6]
#1 6.317000
#2 6.324889
#5 6.359000
#6 6.359000
#9 6.361111
#Name: N0_YLDF, dtype: float64