【问题标题】:Picking up column values based on two conditions根据两个条件提取列值
【发布时间】:2018-01-20 07:25:30
【问题描述】:

我有以下文本输出,我的目标是仅在第 1 列中的值大于 1 但小于或等于 4 时选择第 2 列的值。所以我正在寻找 Python 来打印第 2 列的值为 [-6,0,-4] 因为只有这些值符合第 1 列的条件。

  1. 1 2
  2. 2 -6
  3. 3 0
  4. 4 -4
  5. 5 100

我尝试了以下方法。

import pandas as pd
import numpy as np
data= pd.read_table('/Users/Hrihaan/Desktop/A.txt', dtype=float, header=None, sep='\s+').values
x=data[:,0]
y=np.where(1< x<= 4, data[:, 1], np.nan)
print(y)

我收到以下错误:ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

任何建议都会很有帮助。

【问题讨论】:

    标签: python pandas numpy conditional-statements multiple-columns


    【解决方案1】:

    有几种方法可以使用 Pandas 完成此任务。一种简单的解决方案是使用query()

    import pandas as pd
    import numpy as np
    
    data = {"a":np.arange(1,6), "b":[2,-6,0,-4,100]}
    df = pd.DataFrame(data)
    
    print(df)
       a    b
    0  1    2
    1  2   -6
    2  3    0
    3  4   -4
    4  5  100
    

    现在使用query 过滤,并选择列b

    df.query('1 < a <= 4').b
    
    1   -6
    2    0
    3   -4
    Name: b, dtype: int64
    

    【讨论】:

      【解决方案2】:

      第一次使用.loc

      df.loc[(df.a>1)&(df.a<=4), 'b']
      Out[316]: 
      1   -6
      2    0
      3   -4
      

      第二个基于你自己的方法

      np.where((df.a<= 4)&(df.a>1), df.b,np.nan)
      
      Out[322]: array([ nan,  -6.,   0.,  -4.,  nan])
      

      数据输入:

      df = pd.DataFrame({"a":np.arange(1,6), "b":[2,-6,0,-4,100]})
      

      【讨论】:

      • @jezrael 已添加,谢谢~~看起来更整洁了
      猜你喜欢
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      相关资源
      最近更新 更多