我有一列,每行的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
我希望输出像下面这样:
答案 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)