数据框中单列的多个条件,pandas

use*_*693 2 python pandas

我正在尝试从单个数据帧列中选择一个子集,并且我需要帮助在单个列上应用两个条件。例如,如何在下表中同时选择“Tom”和“Chris”?

import pandas as pd
dic={"Name":["Chris","Tom","Steven"], "Age":[12,34,55]}
dic={"Name":["Chris","Tom","Steven"], "Age":[12,34,55]}
df=pd.DataFrame(dic)
df[df["Name"]=="Tom"]
Run Code Online (Sandbox Code Playgroud)

为什么当我使用 df[df["Name"]==("Chris" or "Tom")] 它时选择“Chris”,但是当 or 被替换为 and 时,选择“Tom”?

Max*_*axU 5

当我们检查时condition1 OR condition2- 如果第一个条件/操作数是 就足够了True,所以如果第一个条件/操作数为 True - 第二个将不会被检查(因为有一个就足够了True):

In [247]: 1 or 2
Out[247]: 1
Run Code Online (Sandbox Code Playgroud)

对于 AND,如果第一个条件是,我们还必须检查第二个条件True(因为所有条件都必须是True):

In [248]: 1 and 2
Out[248]: 2
Run Code Online (Sandbox Code Playgroud)

但如果第一个条件是False我们不需要检查第二个条件(因为有一个就足够了False- 它会构成整个“东西” False):

In [250]: 0 and 1
Out[250]: 0
Run Code Online (Sandbox Code Playgroud)

相同的逻辑将应用于字符串(注意:空字符串将被评估为False):

In [242]: ("Chris" or "Tom")
Out[242]: 'Chris'

In [249]: ("Chris" and "Tom")
Out[249]: 'Tom'
Run Code Online (Sandbox Code Playgroud)

所以当你这样做时

df[df["Name"]==("Chris" or "Tom")]
Run Code Online (Sandbox Code Playgroud)

它等同于:

df[df["Name"]=="Chris"]
Run Code Online (Sandbox Code Playgroud)

如何正确地做到这一点(以 Pandas 的方式)

In [243]: df[df["Name"].isin(["Chris","Tom"])]
Out[243]:
   Age   Name
0   12  Chris
1   34    Tom
Run Code Online (Sandbox Code Playgroud)