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
我有一个这样的数据框,
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