您好我正在尝试创建一个列。 列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'
非常感谢,
的空间截屏答案 0 :(得分:2)
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.strip
,str.upper
预处理数据,以去除空格和大写字符串。