Python如何在pandas数据帧的[]括号中提取指定的字符串,并使用布尔值创建一个新列

yus*_*426 2 python string extraction python-2.7 pandas

我是编程新手,非常感谢您的任何见解!

我有这样的数据框.

DF;

            info                Price  
0   [100:Sailing]                $100
1   [150:Boating, 100:Sailing]   $200
2   [200:Surfing]                $300
Run Code Online (Sandbox Code Playgroud)

我想基于info列中的信息创建具有活动名称的新列,如果info列中有相应的名称,则在新列中添加1.它看起来像下面的数据帧.

   Price  Sailing  Boating  Surfing
0   $100       1         0        0
1   $200       1         1        0
2   $300       0         0        1
Run Code Online (Sandbox Code Playgroud)

我尝试了代码打击,但没有工作..(尽管这种方法适用于其他列)

df1 = df.info.str.extract(r'(Boating|Sailing|Surfing)',expand=False)
df2 = pd.concat([df,pd.get_dummies(df1).astype(int)],axis=1)
Run Code Online (Sandbox Code Playgroud)

我有超过10数千个数据的这样所以idealy我想写一个代码,其在信息栏自动提取指定的字符串(如冲浪),创建与该活动名称的新列,并返回1或0如上所示.我认为数据框架中的数据或数据类型中的括号可能会导致问题,但我不知道如何解决这个问题.

ayh*_*han 5

我假设info列中的值的格式类似于Python列表.

df1 = df['info'].str[1:-1].str.replace(' ', '').str.get_dummies(',')
df1.rename(columns=lambda x: x.rsplit(':')[-1], inplace=True)
df2 = pd.concat([df, df1.astype(int)], axis=1)

df2
Out: 
                         info Price  Sailing  Boating  Surfing
0               [100:Sailing]  $100        1        0        0
1  [150:Boating, 100:Sailing]  $200        1        1        0
2               [200:Surfing]  $300        0        0        1
Run Code Online (Sandbox Code Playgroud)