在一系列多个值

时间:2016-05-23 09:10:04

标签: python numpy pandas dataframe series

您好我正在尝试创建一个列。 列ChannelID是' J',' F'' H'那么列名间接应该是1 else 0,我相信在我的csv文件中ChannelID列的每个单元格中都有空格。

原始数据

cd          Channel month
B               J   1
B               J   3
B               M   5
B               J   7
B               J   9
B               H   2
B               J   5
B               J   6
B               J   1
B               J   7

预期数据集

cd         Channel  month   Indirect
B               J   1   1
B               J   3   1
B               M   5   0
B               J   7   1
B               J   9   1
B               H   2   1
B               J   5   1
B               J   6   1
B               C   1   0
B               J   7   1

使用的代码

Output['Indirect']=np.where((Output['Channel']=='J')|(Output['Channel']=='H'),1,0)

但是此代码在间接列中仅给出0,如果我使用下面的代码,那么我会收到错误 -

if Output['Channel']== ('J' or 'F' or 'H' or 'G' or 'I'or 'K' or 'M'):
    Output['Indirect'] = 1
else:
    Output['Indirect'] = 0

error- ValueError:系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

由于Channel列中的每个单元格中都有值后面的空格,然后我使用strip删除它然后我得到以下错误 -

if Output['Channel'].strip()== ('J' or 'F' or 'H' or 'G' or 'I'or 'K' or 'M'):
    Output['Indirect'] = 1
else:
    Output['Indirect'] = 0

error- AttributeError:' Series'对象没有属性' strip'

非常感谢,

我也附上了每个单元格space after j and all values in all cells

的空间截屏

1 个答案:

答案 0 :(得分:2)

将列表传递给isin并使用astype转换布尔类型:

In [4]:
df['indirect'] = df['Channel'].str.strip().isin(['J','F','H']).astype(int)
df

Out[4]:
  cd Channel  month  indirect
0  B       J      1         1
1  B       J      3         1
2  B       M      5         0
3  B       J      7         1
4  B       J      9         1
5  B       H      2         1
6  B       J      5         1
7  B       J      6         1
8  B       J      1         1
9  B       J      7         1

这是从isin生成的布尔系列:

In [5]:
df['Channel'].str.strip().isin(['J','F','H'])

Out[5]:
0     True
1     True
2    False
3     True
4     True
5     True
6     True
7     True
8     True
9     True
Name: Channel, dtype: bool

如果需要,您可以使用矢量化str.stripstr.upper预处理数据,以去除空格和大写字符串。