Pandas - 将分类数据分成列
Pandas - break categorical data into columns
我有以下table
df = pandas.DataFrame({'foo': ['b', 'a,b', 'a,c', 'a,b,c'],
'bar': ['X,Y', 'Z', 'Z,X', 'X,Y']})
我希望有一个包含 'a'、'b'、'c'、'X'、'Y'、[=23 列的 table =],有 False/True 个条目。
这不是 1-hot 编码器,因为可以有多个值。我该如何实现?
我认为如果只有 2 列加倍 str.get_dummies
with join
和布尔值的最后一个转换:
df = df['foo'].str.get_dummies(',').join(df['bar'].str.get_dummies(',')).astype(bool)
print (df)
a b c X Y Z
0 False True False True True False
1 True True False False False True
2 True False True True False True
3 True True True True True False
如果多列,更通用的解决方案是 list comprehension
和 concat
:
df = pd.concat([df[x].str.get_dummies(',') for x in df.columns], axis=1).astype(bool)
我有以下table
df = pandas.DataFrame({'foo': ['b', 'a,b', 'a,c', 'a,b,c'],
'bar': ['X,Y', 'Z', 'Z,X', 'X,Y']})
我希望有一个包含 'a'、'b'、'c'、'X'、'Y'、[=23 列的 table =],有 False/True 个条目。
这不是 1-hot 编码器,因为可以有多个值。我该如何实现?
我认为如果只有 2 列加倍 str.get_dummies
with join
和布尔值的最后一个转换:
df = df['foo'].str.get_dummies(',').join(df['bar'].str.get_dummies(',')).astype(bool)
print (df)
a b c X Y Z
0 False True False True True False
1 True True False False False True
2 True False True True False True
3 True True True True True False
如果多列,更通用的解决方案是 list comprehension
和 concat
:
df = pd.concat([df[x].str.get_dummies(',') for x in df.columns], axis=1).astype(bool)