从单个列创建多个列

时间:2017-04-27 09:09:23

标签: python pandas numpy dataframe

我正在处理一个包含以下内容的数据框:

         Products
1           A;B
2           A
3           D;A;C

我想改为:

          Has_A      Has_B        Has_C   ...
1           1          1            0
2           1          0            0

此外,作为更进一步,有些行包含类似"没有产品"或"无"并且有NaNs,我想将所有这些放入一列(如果可能的话)。

任何提示?有可能吗?

谢谢

1 个答案:

答案 0 :(得分:2)

您可以主要使用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

样品:

使用dict创建的list comprehension添加replace并添加NaNNone的解决方案。

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