逻辑操作:从数据框中的列中选择两个值

Posted

技术标签:

【中文标题】逻辑操作:从数据框中的列中选择两个值【英文标题】:Logic operation: Select two values from a column in a dataframe 【发布时间】:2019-09-30 22:28:48 【问题描述】:

我有一个数据框如下,

df2 = pd.DataFrame('a' : ['one', 'one', 'two', 'three', 'two', 'one', 'six'],
                    'b' : ['x', 'y', 'y', 'x', 'y', 'x', 'x'],
                    'c' : np.random.randn(7))

我想从df2中选择'a'列等于'二'或'三'的数据,我的代码如下,

df2[df2['a']=='two'or df2['a']=='three']

谁能告诉我为什么我的代码不起作用?

错误:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

提前致谢!

【问题讨论】:

【参考方案1】:

使用| 代替or

df2[(df2['a']=='two') | (df2['a']=='three')]

【讨论】:

我知道'|'是按位和或是一个逻辑,但我很困惑为什么我需要在这里使用 |而不是or,你能解释一下吗?谢谢!【参考方案2】:

你很接近但你需要做一些事情,首先使用|运算符指定一个or语句,然后将每个条件放在括号中,

这应该可行

df2.loc[(df2['a']=='two') | (df2['a']=='three')]

【讨论】:

【参考方案3】:

那是isin

slice=df2.loc[df2.a.isin(['one','two'])].copy()
slice
Out[797]: 
     a  b         c
0  one  x -0.064378
1  one  y  0.344902
2  two  y -0.080087
4  two  y  1.433515
5  one  x  1.065794

【讨论】:

以上是关于逻辑操作:从数据框中的列中选择两个值的主要内容,如果未能解决你的问题,请参考以下文章

如何从熊猫数据框中的列中删除字符串值

PySpark - 如何根据列中的两个值从数据框中过滤出连续的行块

像 Qlik 一样计算 pandas 数据框中的列中的唯一值?

从两个熊猫系列(csv的列作为DataFrame)创建元素字典

如果所有行的列中只有一个值,则折叠 Pandas 数据框中的行

根据列中的“是”或“否”仅绘制选定的行