![](/img/trans.png)
[英]In python pandas, How do you eliminate rows of data that fail to meet a condition of grouped data?
[英]pandas keep both rows that meet or fail condition
对于一个看起来像这样的 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
如果满足条件,我正在尝试使用 boolean 添加一列
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 的 stat 列。
但是,当我将相同的条件分配给变量时,我看不到 true 或 false 列
这是因为使用df[x1]
, pandas 执行boolean 索引,您最终只会得到满足条件的行。
保留所有行,但如果满足条件则添加一列
使用第一种方式,您可以链接多个条件并将其全部分配给一个新列,而不是使用它们进行索引:
>>> df["stat"] = x1 & x2
>>> df
age salary stat
0 21 20 True
1 45 40 False
2 45 10 False
3 5 100 False
您可以在这里使用应用 function:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.