将多个列的字符串值传输到Pandas中的数字

时间:2019-09-19 04:54:49

标签: python pandas

我正在像这样的数据帧工作:

   id type1 type2 type3
0   1   dog   NaN   NaN
1   2   cat   NaN   NaN
2   3   dog   cat   NaN
3   4   cow   NaN   NaN
4   5   dog   NaN   NaN
5   6   cat   NaN   NaN
6   7   cat   dog   cow
7   8   dog   NaN   NaN

如何将其传输到以下数据框?谢谢。

   id  dog  cat  cow
0   1  1.0  NaN  NaN
1   2  NaN  1.0  NaN
2   3  1.0  1.0  NaN
3   4  NaN  NaN  1.0
4   5  1.0  NaN  NaN
5   6  NaN  1.0  NaN
6   7  1.0  1.0  1.0
7   8  1.0  NaN  NaN

1 个答案:

答案 0 :(得分:4)

首先用DataFrame.filter过滤type列,再用DataFrame.stack整形,所以可以调用Series.str.get_dummies。然后对于0/1的输出,请使用max的第一级的MultiIndex并将DataFrame.mask1更改为NaN。最后在DataFrame.join前添加第一列:

df1 = df.filter(like='type').stack().str.get_dummies().max(level=0).mask(lambda x: x == 0)

或对每个列名使用get_dummiesmax,最后将1更改为NaN s:

df1 = (pd.get_dummies(df.filter(like='type'), prefix='', prefix_sep='')
         .max(level=0, axis=1)
         .mask(lambda x: x == 0))

df = df[['id']].join(df1)
print (df)
   id  cat  cow  dog
0   1  NaN  NaN  1.0
1   2  1.0  NaN  NaN
2   3  1.0  NaN  1.0
3   4  NaN  1.0  NaN
4   5  NaN  NaN  1.0
5   6  1.0  NaN  NaN
6   7  1.0  1.0  1.0
7   8  NaN  NaN  1.0