Pandas 从数据行创建列类别

Pandas create column categories from rows of data

我有一个这样的数据框,

id   Name
100  Apple
200  Orange
100  Banana

我想根据名称创建新的列,并用 0 或 1 标记它们。

像这样,

id  Name_Apple  Name_Orange  Name_Banana
100  1           0              1
200  0           1              0

Id 100 在名称中标记为 1 表示苹果和香蕉,0 表示橙色。 Id 200 仅标记 1 为橙色。我实际上不确定该怎么做。感谢任何帮助。

谢谢。

版本 1:如果您只想用 0 或 1 标记条目:

使用pd.get_dummies() + GroupBy.max(),如下:

df_out = (pd.get_dummies(df)
            .groupby('id').max()
            .reset_index()
         )

结果:

print(df_out)

    id  Name_Apple  Name_Banana  Name_Orange
0  100           1            1            0
1  200           0            0            1

版本 2:如果您想将条目标记为出现次数(可以 > 1)

如果您希望条目反映出现次数(可以是多次出现,因此 > 1),您可以使用 pd.crosstab(),如下所示:

pd.crosstab(df['id'], df['Name'])

数据输入

    id    Name
0  100   Apple
1  200  Orange
2  100  Banana         <=== multiple occurrences 
3  100  Banana         <=== multiple occurrences 

结果

Name  Apple  Banana  Orange
id                         
100       1       2       0
200       0       0       1

请注意 Banana 对于 id==100 的计数为 2 而不是 0 或 1。

也可以使用pd.get_dummies(),如下:

df_out = (pd.get_dummies(df)
            .groupby('id').sum()
            .reset_index()
         )

这里,我们使用GroupBy.sum() instead of GroupBy.max()

结果:

print(df_out)

    id  Name_Apple  Name_Banana  Name_Orange
0  100           1            2            0
1  200           0            0            1