2017-02-23 138 views
1

我知道Pandas有一个get_dummy函数,您可以使用该函数将分类变量转换为DataFrame中的虚拟变量。我想要做的是略有不同。从值列创建虚拟变量列

我有一个包含百分比值从0.0到100.0的列。我需要将其转换为任何值大于等于10.0且任意值为0的列为1的列< 10.0。有没有一个很好的方法可以在这里重新调整get_dummy或者我将不得不构建一个循环来完成它?

回答

2

您可以可以转换布尔变量直接整数:

(df.column_of_interest >= 10).astype(int) 
1

我假设你在这里讨论pandas.get_dummies,我不认为这是一个用例吧。您正试图在布尔条件中设置两个值。一种方法是取得布林系列,并采取指标整数表示,与

df['indicators'] = (df.percentages >= 10.).astype('int') 

演示

>>> df 

    percentages 
0  70.176341 
1  70.638246 
2  55.078803 
3  42.586290 
4  73.340089 
5  53.308670 
6  3.059331 
7  49.494812 
8  10.379713 
9  7.676286 
10 55.023261 
11  4.417545 
12 51.744169 
13 49.513638 
14 39.189640 
15 90.521703 
16 29.696734 
17 11.546118 
18  5.737921 
19 83.258049 


>>> df['indicators'] = (df.percentages >= 10.).astype('int') 

>>> df 
    percentages indicators 
0  70.176341   1 
1  70.638246   1 
2  55.078803   1 
3  42.586290   1 
4  73.340089   1 
5  53.308670   1 
6  3.059331   0 
7  49.494812   1 
8  10.379713   1 
9  7.676286   0 
10 55.023261   1 
11  4.417545   0 
12 51.744169   1 
13 49.513638   1 
14 39.189640   1 
15 90.521703   1 
16 29.696734   1 
17 11.546118   1 
18  5.737921   0 
19 83.258049   1 
0

让我们假设你有一个数据帧df,与包含列Perc您百分比:

import pandas as pd 
pd.np.random.seed(111) 

df = pd.DataFrame({"Perc": pd.np.random.uniform(1, 100, 20)}) 

现在,您可以很容易地通过使用一个新的列一个可重新编码百分比的lambda函数,如下所示:

df["Category"] = df.Perc.apply(lambda x: 0 if x < 10.0 else 1)