如果在列中的x唯一值下,则将数据框列转换为虚拟对象

时间:2016-11-17 11:34:36

标签: python pandas

我试图创建一个函数,如果列包含少于一定数量的唯一值,则将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

但是,我认为可能有一个更清洁的解决方案。

1 个答案:

答案 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