我正在使用具有以下内容的列的数据框:
Products
1 A;B
2 A
3 D;A;C
我想改为:
Has_A Has_B Has_C ...
1 1 1 0
2 1 0 0
另外,更进一步,有些行包含诸如“无产品”或“无”之类的内容,并且存在NaN,我想将所有这些都放入一列(如果可能的话)。
有小费吗 ?有可能吗?
谢谢
最佳答案
您可以主要使用str.get_dummies
:
df = df['Products'].str.get_dummies(';').add_prefix('Has_')
print (df)
Has_A Has_B Has_C Has_D
0 1 1 0 0
1 1 0 0 0
2 1 0 1 1
样品:
还存在使用
replace
创建的dict
并添加了list comprehension
和NaN
的None
和解决方案。df = pd.DataFrame({'Products': ['A;B', 'A', 'D;A;C', 'No prods', np.nan, 'None']})
print (df)
Products
0 A;B
1 A
2 D;A;C
3 No prods
4 NaN
5 None
L = ['No prods','None']
d = {x :'No product' for x in L + [None, np.nan]}
df['Products'] = df['Products'].replace(d)
df = df['Products'].str.get_dummies(';').add_prefix('Has_')
print (df)
Has_A Has_B Has_C Has_D Has_No product
0 1 1 0 0 0
1 1 0 0 0 0
2 1 0 1 1 0
3 0 0 0 0 1
4 0 0 0 0 1
5 0 0 0 0 1
关于python - 从单个列创建多个列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43653398/