我正在尝试从单个数据框列中选择一个子集,我需要帮助在单个列上应用两个条件。例如,如何在下表中选择“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"]
为什么我用的时候呢?
df[df["Name"]==("Chris" or "Tom")]
它选择了“克里斯,但是何时或被替换为”,“汤姆”被选中了?
答案 0 :(得分:2)
当我们检查condition1 OR condition2
时 - 如果第一个条件/操作数是True
就足够了,所以如果第一个是真,那么第二个不是检查(因为它足以拥有一个True
):
In [247]: 1 or 2
Out[247]: 1
对于AND我们必须检查第二个,如果第一个是True
(因为所有条件必须是True
):
In [248]: 1 and 2
Out[248]: 2
但如果第一个条件是False
,我们就不需要检查第二个条件(因为它足以让False
- 它会让整体"事情" False
):
In [250]: 0 and 1
Out[250]: 0
相同的逻辑将应用于字符串(注意:空字符串将被评估为False
):
In [242]: ("Chris" or "Tom")
Out[242]: 'Chris'
In [249]: ("Chris" and "Tom")
Out[249]: 'Tom'
所以当你这样做时
df[df["Name"]==("Chris" or "Tom")]
它与:
相同df[df["Name"]=="Chris"]
如何正确地做到这一点(用熊猫的方式):
In [243]: df[df["Name"].isin(["Chris","Tom"])]
Out[243]:
Age Name
0 12 Chris
1 34 Tom