简体   繁体   English

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

[英]Transfer multiple columns string values to numbers in Pandas

I'm working at a data frame like this:我正在使用这样的数据框:

   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

How can I transfer it to the following dataframe?如何将其转移到以下dataframe? Thank you.谢谢你。

   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

First filter ony type columns by DataFrame.filter , reshape by DataFrame.stack , so possible call Series.str.get_dummies .首先通过DataFrame.stack过滤任何type的列,通过DataFrame.filter重塑,因此可以调用Series.str.get_dummies Then for 0/1 output use max by first level of MultiIndex and change 1 to NaN s by DataFrame.mask .然后对于0/1 output 使用第一级MultiIndexmax并通过DataFrame.mask1更改为NaN Last add first column by DataFrame.join :最后通过DataFrame.join添加第一列:

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

Or use get_dummies and max per columns names and last change 1 to NaN s:或使用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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM