使用 np.where 在一系列多个值上创建另一个包含 1 和 0 的列
create another column with 1 and 0 using np.where, on a series of multiple values
您好,我正在尝试创建一个专栏。
如果列 ChannelID 是 'J','F','H' 那么间接列名应该是 1 否则 0,我相信我的 csv 文件中的每个单元格中都有 spaces 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:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
因为 Channel 列中每个单元格中的值后有 space 然后我使用 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 的屏幕截图
将列表传递给 isin
and cast the boolean type using 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.strip
、str.upper
预处理数据,以去除空格并将字符串大写。
您好,我正在尝试创建一个专栏。 如果列 ChannelID 是 'J','F','H' 那么间接列名应该是 1 否则 0,我相信我的 csv 文件中的每个单元格中都有 spaces 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:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
因为 Channel 列中每个单元格中的值后有 space 然后我使用 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 的屏幕截图
将列表传递给 isin
and cast the boolean type using 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.strip
、str.upper
预处理数据,以去除空格并将字符串大写。