我有一个看起来像下面的数据框:
enter image description here

数据框根据其状态对问题进行计数:

question_count_data.columns = ['date', 'curriculum_name_en', 'concept', 'language',
                               'concept_name_en', 'concept_name_tc', 'state', 'question_count']


question_count_data['state'] = question_count_data['state']\
    .map({10: 'DRAFT', 20: 'REVIEW', 30: 'PUBLISHED', 40: 'ERROR', 50: 'DISABLED'})


我使用以下方法创建此数据框:

question_count_data = df_question.groupby(['date', 'concept__curriculum__name_en', 'concept',
                                           'language', 'concept_name_en', 'concept_name_tc', 'state', ],
                                            as_index=False)['question_count'].sum()


我现在想为每个状态DRAFT,REVIEW,PUBLISHED等创建单独的列,并在行中提供问题计数,其看起来必须如下所示:
enter image description here

使用question_count_data数据框执行此操作的最佳方法是什么?我不想更改已经实施的groupby方法,因为那是为我提供问题计数的原因。

我不认为拥有另一种groupby方法是可行的解决方案,因为我最终想要做的是获取State列的行值,并将它们分隔为Draft,Review,Published等列,然后提供每个日期的计数。

详细的解释将对您有所帮助。

最佳答案

您真的很亲密,需要使用as_index=False删除SeriesMultiIndex,然后通过Series.unstack进行整形:

cols = ['date', 'concept__curriculum__name_en', 'concept',
        'language', 'concept_name_en', 'concept_name_tc', 'state']
question_count_data = (df_question.groupby(cols)['question_count']
                                  .sum()
                                  .unstack(fill_value=0))

关于python - Pandas DataFrame分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52325109/

10-09 17:07