我想改变它:
In [4]: df
Out[4]:
label
0 (a, e)
1 (a, d)
2 (b,)
3 (d, e)
为此:
a b c d e
0 1 0 0 0 1
1 1 0 0 1 0
2 0 1 0 0 0
3 0 0 0 1 1
您会看到有预定义的列,“ a”,“ b”,“ c”,“ d”,“ e”,并且c为空,但仍然存在。
我尝试了多种类似方法:df.str.join('|')。str.get_dummies() 首先,不使用所有列只是为了在输入中获得具有多个值的虚拟变量,但我想向其中添加预定义的列。
谢谢您的帮助!
答案 0 :(得分:3)
创建一个新的DataFrame,然后创建stack
+ get_dummies
。 any
沿虚拟变量的原始索引。
pd.get_dummies(pd.DataFrame([*df.label], index=df.index).stack()).any(level=0).astype(int)
a b d e
0 1 0 0 1
1 1 0 1 0
2 0 1 0 0
3 0 0 1 1
因为您有预定义的列,所以我们可以重新索引并用0填补缺失。
res = pd.get_dummies(pd.DataFrame([*df.label], index=df.index).stack()).any(level=0)
res = res.reindex(list('abcde'), axis=1).fillna(0).astype(int)
# a b c d e
#0 1 0 0 0 1
#1 1 0 0 1 0
#2 0 1 0 0 0
#3 0 0 0 1 1
答案 1 :(得分:2)
尝试一下:
function gettext(code) {
var func = '=VLOOKUP("'+ code +'";\'VA-Texte\'!A1:I383;\'VA-Texte\'!E1;0)';
return func;
}
答案 2 :(得分:2)
sklearn
的良好做法
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
print (pd.DataFrame(mlb.fit_transform(df['label']),columns=mlb.classes_, index=df.index))