2

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

为了做到这一点,我希望将我的数据框作为每个 ID 一行,每个主题一列包含 1 或 0 值,以指示该主题是否由该行上的 ID 获取。

输入示例:

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

4

3 回答 3

1

您可以使用pivot_table()执行以下操作

 df.pivot_table(index='ID', columns='Subject', aggfunc=len,fill_value=0)
于 2020-01-31T14:50:52.527 回答
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
于 2020-01-31T15:03:08.873 回答
0

您必须将数据框从“堆叠”格式重塑为“枢轴”格式。但首先你必须聚合你的数据。

尝试这样的事情:

agg_df = df.groupby(["ID", "Subject"]).count().reset_index(name="count")
agg_df.pivot(index='ID', columns='Subject', values='count')
于 2020-01-31T14:39:02.040 回答