我试图创建一个函数,如果列包含少于一定数量的唯一值,则将pandas数据框中的列转换为虚拟对象。我的函数在当前状态下看起来像这样:
for i in range(columns):
unique_values = df1[[i]].apply(pd.Series.nunique) # then we find unique values within column i
unique_values1 = unique_values.iloc[0] # then we select unique values within column i
if unique_values1 < 5: # if unique values is below 8 then we dummy that variable
dummys = pd.get_dummies(df1.ix[:, i]) # we make specific dummy for column i
df2 = pd.concat([df2, dummys], axis=1) # we merge dummy's onto original dataframe
else:
pass
但是,我认为可能有一个更清洁的解决方案。
答案 0 :(得分:0)
你实际上可以在一个单行中完成所有这些。
这里有一些虚拟数据:
a b c
0 Var2 Var1 Var3
1 Var1 Var2 Var2
2 Var1 Var2 Var1
3 Var1 Var3 Var1
4 Var1 Var2 Var1
让我们加载它并查看:
df = pd.read_clipboard()
# If nunique is < 3, then we encode. Here only column 'a' should be encoded
cutoff = 3
pd.get_dummies(df, columns=df.columns[df.apply(pd.Series.nunique) < cutoff], drop_first=True)
结果如下:
b c a_Var2
0 Var1 Var3 1
1 Var2 Var2 0
2 Var2 Var1 0
3 Var3 Var1 0
4 Var2 Var1 0