Как сохранить объект groupby в DataFrame pandas

У меня есть следующий DataFrame:

Name    ID  Month   Shift 
Jon     1   Feb     A
Jon     1   Jan     B
Jon     1   Mar     C
Mike    1   Jan     A
Mike    1   Jan     B
Jon     1   Feb     C
Jon     1   Jan     A

И я хочу иметь данные, как показано ниже, как groupby, но я не могу этого сделать. Помогите, пожалуйста.

df.groupby(['Name','ID','Shift']).

введите описание изображения здесь


person Manoj Kumar    schedule 24.06.2020    source источник
comment
Очень похоже на этот вопрос.   -  person Quang Hoang    schedule 24.06.2020


Ответы (1)


Это работает?

df = pd.DataFrame(
    data=[['Jon', 1, 'Feb', 'A'],
          ['Jon', 1, 'Jan', 'B'],
          ['Jon', 1, 'Mar', 'C'],
          ['Mike', 1, 'Jan', 'A'],
          ['Mike', 1, 'Jan', 'B'],
          ['Jon', 1, 'Feb', 'C'],
          ['Jon', 1, 'Jan', 'A']],
    columns=['Name', 'ID', 'Month', 'Shift']
)

empty_rows = pd.DataFrame(
    data=[[name, '', '', ''] for name in df['Name'].unique()],
    columns=list(df)
)
df = pd.concat([df, empty_rows])

# this will need to be extended if you have additional months
df['Month'] = pd.Categorical(df['Month'], ['', 'Jan', 'Feb', 'Mar'])
df = df.set_index(['Name','Month']).sort_values(['Name', 'Month'])

Чтение в файле Excel:

df = pd.read_excel(
    r'C:\Users\dell\Desktop\stats.xlsx',
    sheet_name='Sheet5', 
    usecols=['Name', 'ID', 'Month', 'Shift']
)
person kait    schedule 24.06.2020
comment
Но можем ли мы также отсортировать Месяц? в качестве начальной формы Февраль. я хочу в сборке форматирования, а также только на одну строку ниже имени, как я показал в моем запросе как oput - person Manoj Kumar; 24.06.2020
comment
Я обновил свой ответ, включив в него пустую строку и сортировку по месяцам - person kait; 25.06.2020
comment
вау, Кейт .. ты потрясающий .. Да, он работает отлично, но одно сомнение в месячной части. потому что данные будут увеличиваться каждый месяц. Я имею в виду, что месяц будет также апрель в апреле и май в период мая и так до декабря. поэтому можно использовать код ниже df ['Month'] = pd.Categorical (df ['Month'], ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun' , 'jul', 'Aug', 'sep', 'oct', 'Nov', 'Dec']) .. поэтому, когда у нас есть данные в нашем фреймворке данных, мы будем работать в соответствии с кодированием. - person Manoj Kumar; 25.06.2020
comment
ну, я попытался добавить месяц апр, только чтобы проверить, работает он или нет, и я запускаю, тогда у меня есть ошибка. Traceback (последний вызов последний): Файл ‹pyshell # 20›, строка 1, в ‹module› df ['Month'] = pd.Categorical (df ['Month'], ['', 'Jan', 'Feb ',' Mar ',' Apr ']) ... Файл pandas / _libs / hashtable_class_helper.pxi, строка 1614, в pandas._libs.hashtable.PyObjectHashTable.get_item KeyError:' Month ' - person Manoj Kumar; 25.06.2020
comment
Интересно, похоже, он не может найти столбец «Месяц», можете ли вы добавить print(df.columns) перед строкой, вызывающей ошибку (df['Month'] = pd.Categorical(df['Month'], ['', 'Jan', 'Feb', 'Mar','Apr'])) - person kait; 25.06.2020
comment
Я устал от этого ... что ж, позвольте мне сказать вам, что я импортирую вышеуказанный фрейм данных через pd.read _excel. но это не работает, я добавил январь к декабрю месяца, так что, когда мы получили данные за месяц, они будут автоматически группироваться. Помогите, пожалуйста . - person Manoj Kumar; 25.06.2020
comment
Я рада помочь. можете ли вы предоставить код, который я могу использовать для воспроизведения ошибки? - person kait; 25.06.2020
comment
ниже приведены шаги, которые я делаю; импортировать панды как pd ››› df3 = pd.read_excel (r'C: \ Users \ dell \ Desktop \ stats.xlsx ', sheet_name =' Sheet5 ') ››› df3 = pd.DataFrame (df3) ››› печать (df3) Имя ID Месяц Сдвиг 0 Джон 1 фев A 1 Джон 1 янв B 2 Джон 1 мар C 3 Майк 1 янв A 4 Майк 1 янв B 5 Джон 1 фев C 6 Джон 1 янв A, а затем вам нужно запустить приведенный выше код как вы уже сделали, имея в виду, что в следующем месяце изменится, поэтому это должно происходить автоматически до конца месяца автоматически - person Manoj Kumar; 25.06.2020
comment
У меня нет доступа к этому файлу (r'C:\Users\dell\Desktop\stats.xlsx',sheet_name='Sheet5'), поэтому трудно понять, что происходит не так. Я предполагаю, что это проблема с именами столбцов. Возможно, я смогу помочь, если вы опубликуете вывод для этой команды df3.to_dict() - person kait; 26.06.2020
comment
хорошо, что мои файлы сохранены на моем рабочем столе. я имею в виду, что вы можете скопировать эти данные и запатентовать их в excel, а затем вы можете импортировать их как pd.read_Excel .. вы можете попробовать с этим .. это просто, но не может это исправить .. вы имеете в виду, что я должен data = df3.to_dict (). тогда это будет работать? - person Manoj Kumar; 26.06.2020
comment
Pls @Kait .... пожалуйста, помогите мне ... или кто-нибудь здесь #python - person Manoj Kumar; 27.06.2020
comment
Нет, распечатка фрейма данных не заставит его работать. смысл распечатать фрейм данных и разместить его здесь, чтобы я мог попытаться отладить полученную вами ошибку. - person kait; 30.06.2020
comment
когда вы будете свободны ... поместите приведенные выше данные в Excel и попробуйте ... это не работает ... в то время как приведенный выше код работает, но мне нужно работать с этим, импортировав его ... вы создаете как данные в виде списка. .Может быть, это причина .. действительно буду рад, если ты мне поможешь - person Manoj Kumar; 02.07.2020
comment
Попробуйте передать аргумент usecols. Я обновил ответ примером того, как это будет выглядеть - person kait; 02.07.2020
comment
извините, что переигрываю поздно, хорошо, я пробовал со старым, это рабочий друг ... ну, я сначала попытался понять код, затем я применил то же самое в своем файле ... он работает нормально ... но если вы видите результат, я хочу увидеть месяц чуть ниже имени ... (см. мой выходной экран) ... означает тот же столбец ... может ли это быть возможно, тогда, пожалуйста, помогите мне .. - person Manoj Kumar; 03.07.2020
comment
омг .. ВЫ ОТЛИЧНО ...... большое вам спасибо ........ отлично работает .... только заголовок должен отображаться как имя, но когда мы запускаем этот диасппер заголовка ... - мог бы ты пожалуйста, проверьте - person Manoj Kumar; 03.07.2020
comment
df.rename_axis('Name') Вы можете найти это полезным: pandas.pydata .org / pandas-docs / stable / reference / api /. - person kait; 04.07.2020