熊猫保留满足或失败条件的两行

时间:2021-06-10 12:16:51

标签: python pandas dataframe

对于看起来像这样的 df

d = {'age' : [21, 45, 45, 5],
'salary' : [20, 40, 10, 100]}

df = pd.DataFrame(d)

df
   age  salary
0   21      20
1   45      40
2   45      10
3    5     100

如果满足条件,我正在尝试添加带有布尔值的列

df['stat'] = df['salary'] < 40
df
   age  salary   stat
0   21      20   True
1   45      40  False
2   45      10   True
3    5     100  False

但是,当我将相同的条件分配给变量时,我看不到 true 或 false 列

x1 = df['salary'] < 40
df[x1]
   age  salary
0   21      20
2   45      10

保留所有行但在满足条件时添加列的最佳方法是什么

如果我有多个条件,如下

>>> x2 = df['age'] < 25
df[x1 & x2]
   age  salary
0   21      20

我想返回所有行,但有一个指示 T 或 F 的统计列。

2 个答案:

答案 0 :(得分:4)

<块引用>

但是,当我将相同的条件分配给变量时,我看不到 true 或 false 列

这是因为使用 df[x1],pandas 执行 boolean indexing 并且您最终只会得到满足条件的行。

<块引用>

保留所有行,但在满足条件时添加列

使用第一种方法,您可以链接多个条件并将其分配到一个新列,而不是使用它们进行索引:

>>> df["stat"] = x1 & x2
>>> df

   age  salary   stat
0   21      20   True
1   45      40  False
2   45      10  False
3    5     100  False

答案 1 :(得分:0)

你可以在这里使用apply函数:

df['stat'] = df.apply(lambda x: (x["age"] < 25) & (x["salary"] < 40),axis = 1)

或者为了更好的性能使用 np.where 在 np.where 中,您可以使用任意数量的条件。

df['stat'] = np.where(df['age'] < 25,np.where(df['salary'] < 40,True,False),False)