根据值的条件在数据框中创建二进制列

时间:2016-05-26 09:37:18

标签: python pandas dataframe

我的数据框看起来像这样:

df = pd.DataFrame(np.nan, index=[0,1,2,3], columns=['A','B','C'])
df.iloc[0,0] = 'a'
df.iloc[1,0] = 'b'
df.iloc[1,1] = 'c'
df.iloc[2,0] = 'b'
df.iloc[3,0] = 'c'
df.iloc[3,1] = 'b'
df.iloc[3,2] = 'd'
df

out :   A   B   C
   0    a   NaN NaN
   1    b   c   NaN
   2    b   NaN NaN
   3    c   b   d

我想在其中添加新列,其中的名称是数据框内的值(此处为'a''b''c''d')。这些列是二进制的,并反映值'a''b''c''d'是否在行中。

在一张图片中,我想要的输出是:

        A   B   C    a   b   c   d
   0    a   NaN NaN  1   0   0   0
   1    b   c   NaN  0   1   1   0
   2    b   NaN NaN  0   1   0   0
   3    c   b   d    0   1   1   1

为此,我首先创建用零填充的列:

cols = pd.Series(df.values.ravel()).value_counts().index
for col in cols:
    df[col] = 0

(它不按正确的顺序创建列,但这无关紧要)

然后我......在行和列上使用循环......

for row in df.index:
    for col in cols:
        if col in df.loc[row].values:
            df.ix[row,col] = 1

你会明白为什么我正在寻找另一种方法,即使我的数据帧相对较小(76k行),它仍然需要大约8分钟,这太长了。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您正在寻找 <activity android:name="com.package name.your activity" android:theme="@style/AppTheme"> </activity> 。在这里,我选择使用get_dummies version

.str

输出:

df.fillna('', inplace=True)
(df.A + '|' + df.B + '|'  + df.C).str.get_dummies()