Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python将列条件设置为其他两个列值_Python_Pandas_Numpy_Dataframe_Conditional - Fatal编程技术网

python将列条件设置为其他两个列值

python将列条件设置为其他两个列值,python,pandas,numpy,dataframe,conditional,Python,Pandas,Numpy,Dataframe,Conditional,如果一列或另一列有值,python中是否有方法应用条件 对于一个列,我知道如果列标题包含单词“test”,我可以使用以下代码应用测试标志 但是,如果我想说,如果列标题或列副标题包含单词“test”,那么添加test标志,我该怎么做呢 这显然不起作用 df['Test_Flag'] = np.where(df['Title'|'Subtitle'].str.contains("test|Test"), 'Y', '') 如果有许多列,则更简单的方法是创建子集df[['Title','Subtit

如果一列或另一列有值,python中是否有方法应用条件

对于一个列,我知道如果列标题包含单词“test”,我可以使用以下代码应用测试标志

但是,如果我想说,如果列标题或列副标题包含单词“test”,那么添加test标志,我该怎么做呢

这显然不起作用

df['Test_Flag'] = np.where(df['Title'|'Subtitle'].str.contains("test|Test"), 'Y', '')

如果有许多列,则更简单的方法是创建子集
df[['Title','Subtitle']]
apply
,因为它只适用于
系列
,并通过以下方法检查每行至少一个
True

样本:

df = pd.DataFrame({'Title':['test','Test','e', 'a'], 'Subtitle':['b','a','Test', 'a']})
mask = df[['Title', 'Subtitle']].apply(lambda x: x.str.contains("test|Test")).any(axis=1)
df['Test_Flag'] = np.where(mask,'Y', '')
print (df)
  Subtitle Title Test_Flag
0        b  test         Y
1        a  Test         Y
2     Test     e         Y
3        a     a          
使用@jezrael的设置

df = pd.DataFrame(
    {'Title':['test','Test','e', 'a'],
     'Subtitle':['b','a','Test', 'a']})
pandas
您可以
stack
+
str.contains
+
unstack

import re

df.stack().str.contains('test', flags=re.IGNORECASE).unstack()

  Subtitle  Title
0    False   True
1    False   True
2     True  False
3    False  False
把这一切与

truth_map = {True: 'Y', False: ''}
truth_flag = df.stack().str.contains(
    'test', flags=re.IGNORECASE).unstack().any(1).map(truth_map)
df.assign(Test_flag=truth_flag)

  Subtitle Title Test_flag
0        b  test         Y
1        a  Test         Y
2     Test     e         Y
3        a     a        
numpy
如果性能是一个问题


原始时间测试


@jeangelj,
标志
re
(RegEx)模块中许多函数的“标准”参数。因此,pandas将此标志进一步传递给
re.*
函数调用…@jeangelj我为您更新了另一个解决方案。
df = pd.DataFrame(
    {'Title':['test','Test','e', 'a'],
     'Subtitle':['b','a','Test', 'a']})
import re

df.stack().str.contains('test', flags=re.IGNORECASE).unstack()

  Subtitle  Title
0    False   True
1    False   True
2     True  False
3    False  False
truth_map = {True: 'Y', False: ''}
truth_flag = df.stack().str.contains(
    'test', flags=re.IGNORECASE).unstack().any(1).map(truth_map)
df.assign(Test_flag=truth_flag)

  Subtitle Title Test_flag
0        b  test         Y
1        a  Test         Y
2     Test     e         Y
3        a     a        
v = df.values.astype(str)
low = np.core.defchararray.lower(v)
flg = np.core.defchararray.find(low, 'test') >= 0
ys = np.where(flg.any(1), 'Y', '')
df.assign(Test_flag=ys)

  Subtitle Title Test_flag
0        b  test         Y
1        a  Test         Y
2     Test     e         Y
3        a     a