如何从pandas数据框中的字符串表达式创建虚拟列?

时间:2016-11-14 23:14:59

标签: python pandas

所以,我对python很新,这是我的第一个堆栈溢出帖子。

所以我在数据框中有一个列,其中包含缩写为字母的扑克手中的动作。

pdb_RED.PRFLOP_A.unique()
array(['BrA', 'Brf', 'Bk', 'f', 'Bc', 'r', 'Bf', 'c', 'B', 'Br', 'cc',
   'Bcf', 'Bcc', 'BcrA', 'Brc', 'BQ', 'Brr', 'rf', 'rc', 'BrQ', 'BcA',
   'cr', 'cf', 'Q', 'fQ', 'BKQ', 'rr', 'BrcA', 'rrc', 'Bcr', 'BcQ',
   'BA', 'rQ', 'BfQ', 'rA', 'KQ', 'rrA'], dtype=object)

我想在我的数据框中创建一个新列,其中包含1的虚拟变量,如果表达式在列中匹配,则包含其他所有内容的0。表达:

A1_agro=pdb_RED['PRFLOP_A'].str.contains('[bBrA]$', regex=True)

它返回一个具有True / False值的元组。 (所以1为True,0为False我需要) 我继续在我的原始数据框中创建一个空列,然后以我有限的知识进行尝试。我希望有人可以给我指示,因为它会返回' tuple'对象不支持项目分配'错误。

pdb_RED['PRFLOP_agro']=np.nan
for row in pdb_RED.iterrows():
    if A1_agro[1]==True:
        row['PRFLOP_agro']=1
    else:
        row['PRFLOP_agro']=0

1 个答案:

答案 0 :(得分:0)

我认为如果将循环更改为

,您的代码将会起作用
for i, row in pdb_RED.iterrows():

但是,确实不需要遍历行,您可以将新列直接分配给原始数据帧:

pdb_RED['A1_agro'] = pdb_RED['PRFLOP_A'].str.contains('[bBrA]$', regex=True)

如果你想要整数而不是布尔值,你可以在最后添加.astype(int)