根据两个条件获取列值

时间:2017-08-11 17:39:48

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

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

  1. 1 2
  2. 2 -6
  3. 3 0
  4. 4 -4
  5. 5 100
  6. 我尝试了以下方法。

    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()

    任何建议都会非常有用。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

第一次使用.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]})