[英]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 使用第一级MultiIndex
的max
并通过DataFrame.mask
将1
更改为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_dummies
和max
每列名称,最后将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.