根据pandas数据帧中的多个列值选择行

时间:2015-03-23 19:44:53

标签: python pandas

我有pandas DataFrame df

import pandas as pd

data = {"Name": ["AAAA", "BBBB"],
        "C1": [25, 12],
        "C2": [2, 1],
        "C3": [1, 10]}

df = pd.DataFrame(data)
df.set_index("Name")

打印时看起来像这样(供参考):

      C1  C2  C3
Name            
AAAA  25   2   1
BBBB  12   1  10

我想选择C1C2C3的值在020之间的行。

你能建议一种优雅的方式来选择这些行吗?

4 个答案:

答案 0 :(得分:17)

我认为下面应该这样做,但它的优雅是有争议的。

new_df = old_df[((old_df['C1'] > 0) & (old_df['C1'] < 20)) & ((old_df['C2'] > 0) & (old_df['C2'] < 20)) & ((old_df['C3'] > 0) & (old_df['C3'] < 20))]

答案 1 :(得分:12)

更短的版本:

In [65]:

df[(df>=0)&(df<=20)].dropna()
Out[65]:
   Name  C1  C2  C3
1  BBBB  12   1  10

答案 2 :(得分:6)

我喜欢将df.query()用于这类事情

df.query('C1>=0 and C1<=20 and C2>=0 and C2<=20 and C3>=0 and C3<=20')

答案 3 :(得分:3)

df.query("0 < C1 < 20 and"
         "0 < C2 < 20 and"
         "0 < C3 < 20")

或者更简洁:

df.query("0 < @df < 20").dropna()

后者使用frame.query的{​​{1}}语法(引用其文档:“您可以通过在其前面添加@foo字符来引用环境中的变量”。