我正在此处对数据实施一种热编码
Version Cluster_Size Hardware_type
1.0.4 3 Aplha,Alpha,Aplha
1.0.2 3 Aplha,Beta,Aplha
1.0.9 3 Aplha,Beta,Gama
在df ['hardware_type']。str.get_dummies(sep =',')之后,我能够获得这样的数据帧
Version Cluster_Size Hardware_type Alpha Beta Gama
1.0.4 3 Alpha,Alpha,Alpha 1 0 0
1.0.2 3 Alpha,Beta,Alpha 1 1 0
1.0.9 3 Alpha,Beta,Gama 1 1 1
这正是“一键编码”应该做的,但是我正在尝试实现类似的功能,其中我可以获取列显示在其各自单元格中的分类值。
Version Cluster_Size Hardware_type Alpha Beta Gama
1.0.4 3 Alpha,Alpha,Alpha 3 0 0
1.0.2 3 Alpha,Beta,Alpha 2 1 0
1.0.9 3 Alpha,Beta,Gama 1 1 1
有没有办法做这样的事情? 谢谢您的时间。
答案 0 :(得分:2)
如果使用Series.str.get_dummies
,则没有有关计数的信息。
因此需要另一种解决方案-Counter
与DataFrame
构造函数一起使用:
from collections import Counter
L = [Counter(x.split(',')) for x in df['Hardware_type']]
df = df.join(pd.DataFrame(L, index=df.index).fillna(0).astype(int))
print (df)
Version Cluster_Size Hardware_type Alpha Beta Gama
0 1.0.4 3 Alpha,Alpha,Alpha 3 0 0
1 1.0.2 3 Alpha,Beta,Alpha 2 1 0
2 1.0.9 3 Alpha,Beta,Gama 1 1 1
或者可以使用Series.str.split
,DataFrame.stack
和SeriesGroupBy.value_counts
解决方案,但是应该更慢(取决于数据,最好对其进行测试):
s = df['Hardware_type'].str.split(',', expand=True).stack()
df = df.join(s.groupby(level=0).value_counts().unstack(fill_value=0))
print (df)
Version Cluster_Size Hardware_type Alpha Beta Gama
0 1.0.4 3 Alpha,Alpha,Alpha 3 0 0
1 1.0.2 3 Alpha,Beta,Alpha 2 1 0
2 1.0.9 3 Alpha,Beta,Gama 1 1 1