【问题标题】: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()。

提前致谢!

【问题讨论】:

    标签: pandas dataframe indexing slice numpy-slicing


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-25
        • 1970-01-01
        • 1970-01-01
        • 2017-09-10
        相关资源
        最近更新 更多