如何从数据框中的列中减去标量值,并仅选择满足某些条件的行

时间:2018-02-02 06:51:44

标签: python pandas dataframe

我有一个数据框说

name age hb
ali   34  14
jex   16  13
aja   24  16
joy   23  12

我想将列'age'减去15,将'hb'列减去10。

if the value age-15 < 10 AND hb-10 < 5 :
   select name

不应修改原始数据框

2 个答案:

答案 0 :(得分:1)

使用boolean indexingquery

mask = (df.age-15 < 10) & (df.hb-10 < 5)
s = df.loc[mask, 'name']

或者:

s = df.query('age-15 < 10 & hb-10 < 5')['name']

或者更好,谢谢,@ pir:

s = df.query('age < 25 and hb < 15')['name']

s = df.loc[(df.age < 25) & (df.hb < 15), 'name']

如果想要所有列:

df1 = df.query('age < 25 and hb < 15')

df2 = df[(df.age < 25) & (df.hb < 15)]

答案 1 :(得分:1)

如果要对不同的列使用不同的值进行操作,则与其他不同的值进行比较,对于不同的列,您可以创建具有与列名称对齐的适当索引值的Series。我必须将原始数据框子化为仅关注的列。

to_sub = pd.Series(dict(age=15, hb=10))
to_cmp = pd.Series(dict(age=10, hb=5))
df[df[['age', 'hb']].sub(to_sub).lt(to_cmp).all(1)]

  name  age  hb
1  jex   16  13
3  joy   23  12