从字符串列列表创建布尔列

时间:2019-07-15 14:32:01

标签: python pandas

我有一列,每行的list中的string(每行的字符串都不相同)。我已经基于列中的字符串创建了几个类别,现在我想检查类别是否可用,我将为该类别放置一个类别。

list我正在使用的cusine_type是

['north indian','chinese','south indian','continental','cafe','fast food','beverages','italian','american','desserts','rest_cuisines']

我已经写了一个代码,基本上是2个forloop,很少有人通过if循环来支持逻辑,但是这段代码很慢。我需要一些耗时较少的解决方案。

for i in temp.index:
    split = temp['cuisines'].iloc[i].split(',')
    for string in split:
        string=string.strip()
        if string in cusine_type:

            if temp.loc[i,string]==0:

                temp.loc[i,string]=1          
        else:
            temp.loc[i,'rest_cusines']=1

我希望输出像下面这样:

enter image description here

1 个答案:

答案 0 :(得分:1)

我相信您需要str.get_dummies。为您的示例:

new_df = df1.cuisines.str.get_dummies(sep=', ')

给予:

   cafe  chinese  italian  mexican  north indian  south indian  thai
0     0        1        0        0             1             0     0
1     0        1        0        0             1             0     1
2     1        0        1        1             0             0     0
3     0        0        0        0             1             1     0
4     0        0        0        0             1             0     0

要进行转换,请合并所有rest_cuisines

# get their names
not_in_list = [col for col in new_df.columns if col not in cuisine_list]

# merge into rest_cuisines:
new_df['rest_cusines'] = new_df[not_in_list].max(1)

如果想要整个列表,可以执行以下操作:

new_df.reindex(cuisine_list, axis=1, fill_value=0)

,然后附加到原始数据框:

df = pd.concat((df, new_df), axis=1)