Создание новых фреймов данных с использованием groupby - PullRequest
0 голосов
/ 29 июня 2018

Я прочитал это ( Как создать несколько фреймов данных из объекта pandas groupby ), однако я до сих пор не понимаю, как создавать свои фреймы данных для каждого человека после создания группы grouped_persons с помощью groupby.

Как создать несколько фреймов данных из объекта группового панды

Что я должен изменить в этом коде? Я думаю, что это часть моей проблемы: 'df _' + name + '1'

grouped_persons = df.groupby('Person')
for name, group in grouped_persons
    'df_'+ name +'1' = df.loc[(df.Person == name) & (df.ExpNum == 1)]

Файл "", строка 2 по имени, группа в grouped_persons ^ SyntaxError: неверный синтаксис

Ответы [ 3 ]

0 голосов
/ 10 июля 2018

Пусть ваш DataFrame будет выглядеть так

df = pd.DataFrame([['Tim', 1, 2],
                   ['Tim', 0, 2],
                   ['Claes', 1, 3],
                   ['Claes', 0, 1],
                   ['Emma', 1, 1],
                   ['Emma', 1, 2]], columns=['Person', 'ExpNum', 'Data'])

давая

>>> df
  Person  ExpNum  Data
0    Tim       1     2
1    Tim       0     2
2  Claes       1     3
3  Claes       0     1
4   Emma       1     1
5   Emma       1     2

Затем вы получите групповые кадры данных непосредственно из объекта pandas groupby

grouped_persons = df.groupby('Person')

от

>>> grouped_persons.get_group('Emma')
  Person  ExpNum  Data
4   Emma       1     1
5   Emma       1     2

и хранить их отдельно не нужно.

Примечание. Используемая версия Pandas была '0.23.1', но эта функция может быть доступна и в некоторых более ранних версиях.

Изменить: Если вас интересуют эти записи только с ExpNum == 1, я предлагаю применить это перед групповой, например,

grouped_persons_1 = df[df['ExpNum'] == 1].groupby('Person')
0 голосов
/ 10 июля 2018

Используйте словарь для переменного числа переменных.

Одним из простых решений является использование tuple клавиш, представляющих ('Person', 'ExpNum') комбинации. Вы можете достичь этого, передав объект groupby в tuple, а затем результат в dict.

Данные @ KayWittig.

df = pd.DataFrame([['Tim', 1, 2], ['Tim', 0, 2],
                   ['Claes', 1, 3], ['Claes', 0, 1],
                   ['Emma', 1, 1], ['Emma', 1, 2]],
                  columns=['Person', 'ExpNum', 'Data'])

df_dict = dict(tuple(df.groupby(['Person', 'ExpNum'])))

print(df_dict)

{('Claes', 0):   Person  ExpNum  Data
               3  Claes       0     1,
 ('Claes', 1):   Person  ExpNum  Data
               2  Claes       1     3,
 ('Emma', 1):   Person  ExpNum  Data
               4   Emma       1     1
               5   Emma       1     2,
 ('Tim', 0):   Person  ExpNum  Data
               1    Tim       0     2,
 ('Tim', 1):   Person  ExpNum  Data
               0    Tim       1     2}
0 голосов
/ 29 июня 2018

Вы можете сохранить его в словаре, как это. Я исправил некоторые синтаксические ошибки в вашем коде.

    grouped_persons = df.groupby('Person')
    multi_df = {}
    for name, group in grouped_persons:
       multi_df['df_'+ name +'1'] = df[(df.Person == name) & (df.ExpNum == 1)]

Теперь вы можете вернуть сохраненный фрейм данных, используя multi_df['df_myname_1']

...