Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.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 - Fatal编程技术网

Python 熊猫条件过滤器

Python 熊猫条件过滤器,python,pandas,Python,Pandas,我有一个数据帧 A B C 0 True True True 1 True False False 2 False False False 我想添加一个具有以下条件的D行: 如果A、B和C为真,则D为真。否则,D是假的 我试过了 df['D'] = df.loc[(df['A'] == True) & df['B'] == True & df['C'] == True] 我明白了 然后我尝试按照链接中的建议编写了一个类似的函数: def a

我有一个数据帧

   A     B     C
0  True  True  True
1  True  False False
2  False False False
我想添加一个具有以下条件的D行:

如果A、B和C为真,则D为真。否则,D是假的

我试过了

df['D'] = df.loc[(df['A'] == True) & df['B'] == True & df['C'] == True] 
我明白了

然后我尝试按照链接中的建议编写了一个类似的函数:

def all_true(row):

   if row['A'] == True:
      if row['B'] == True:
         if row['C'] == True:
             val = True
   else:
      val = 0

return val

df['D'] = df.apply(all_true(df), axis=1)
在这种情况下,我会

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我很感谢你的建议。谢谢

True
相比,无需使用
的ony-chain布尔掩码:

df['D'] = df['A'] & df['B'] & df['C']
如果绩效很重要:

df['D'] = df['A'].values & df['B'].values & df['C'].values
或用于检查每行的所有
True
s:

df['D'] = df[['A','B','C']].all(axis=1)

#numpy all 
#df['D'] = np.all(df.values,1)

性能


或者更好:

df['D']=df.all(1)
现在:

print(df)
是:

使用熊猫:

或:

或:


@jezrael,什么是
perfplot
这是matplotlib导入吗?我喜欢学习这是一个很好的例子。不,这是自定义模块,从unutbu学习,-但它使用matplotlibGood Try+1:-)
np.random.seed(125)

def all1(df):
    df['D'] = df.all(axis=1)
    return df

def all1_numpy(df):
    df['D'] = np.all(df.values,1)
    return df

def eval1(df):
    df['D'] = df.eval('A & B & C')
    return df

def chained(df):
    df['D'] = df['A'] & df['B'] & df['C']
    return df

def chained_numpy(df):
    df['D'] = df['A'].values & df['B'].values & df['C'].values
    return df
def make_df(n):
    df = pd.DataFrame({'A':np.random.choice([True, False], size=n),
                       'B':np.random.choice([True, False], size=n),
                       'C':np.random.choice([True, False], size=n)})
    return df

perfplot.show(
    setup=make_df,
    kernels=[all1, all1_numpy, eval1,chained,chained_numpy],
    n_range=[2**k for k in range(2, 25)],
    logx=True,
    logy=True,
    equality_check=False,
    xlabel='len(df)')
df['D']=df.all(1)
print(df)
       A      B      C      D
0   True   True   True   True
1   True  False  False  False
2  False  False  False  False
df['D'] = df.eval('A & B & C')
df = df.eval('D = A & B & C')
#alternative inplace df.eval('D = A & B & C', inplace=True)
df['D'] = np.all(df.values,1)

print(df)
       A      B      C      D
0   True   True   True   True
1   True  False  False  False
2  False  False  False  False