根据现有列中的值创建新列并合并行

时间:2020-01-31 14:14:39

标签: python pandas jupyter-notebook

我的数据框包含一列ID和一列主题。最终,我想按主题对数据进行聚类,这样我就可以看到按所拍摄的主题聚类的ID组。

为此,我希望将数据帧作为每个ID的一行,最后每个主题的一列包含1或0值,以指示该主题是否被该行的ID占用。 / p>

输入示例:

ID      Subject
John    History
John    English
Jane    Maths
Jane    Science
Jane    History
Mark    History
Mark    Science
Mark    Mathematics

预期输出:

Subject  English  History  Mathematics  Maths  Science
ID                                                    
Jane           0        1            0      1        1
John           1        1            0      0        0
Mark           0        1            1      0        1

3 个答案:

答案 0 :(得分:1)

您可以使用pivot_table()

执行以下操作
Game

答案 1 :(得分:1)

您可以使用函数crosstab

pd.crosstab(df['ID'], df['Subject'])

输出:

Subject  English  History  Mathematics  Maths  Science
ID                                                    
Jane           0        1            0      1        1
John           1        1            0      0        0
Mark           0        1            1      0        1

答案 2 :(得分:0)

您必须从"stacked" format to "pivot" format重塑数据框。 但是首先,您必须汇总数据。

尝试这样的事情:

agg_df = df.groupby(["ID", "Subject"]).count().reset_index(name="count")
agg_df.pivot(index='ID', columns='Subject', values='count')