首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas -根据多个条件过滤数据帧

Pandas -根据多个条件过滤数据帧
EN

Stack Overflow用户
提问于 2020-05-13 22:59:24
回答 1查看 152关注 0票数 2

我有一个数据帧df:

代码语言:javascript
复制
type    rec_1   rec_2   rec_3   rec_4   rec_1_outlier   rec_2_outlier   rec_3_outlier   rec_4_outlier
yellow  1          7       3       1       FALSE        TRUE                  TRUE          TRUE
red     3         11       2       5       FALSE        TRUE                 FALSE          FALSE
blue    5         2        1       6        TRUE        FALSE                FALSE          FALSE
green   2         9       13       9        FALSE       FALSE                TRUE           FALSE

我希望获得每个类型的单独数据帧,其中_outlier列仅为false,但rec列彼此独立,一列可能为true,另一列可能为false。

所以理论上如果我尝试

代码语言:javascript
复制
df_blue = df['type']=='blue' & df['rec_1_outlier']=='False' & df['rec_2_outlier']=='False' & df['rec_3_outlier']=='False' & df['rec_4_outlier']=='False'

这可能永远不会选择任何行,因为_outlier列可能永远不会全部为false。

我也考虑过像这样一次做一列。

代码语言:javascript
复制
df_blue_rec_1 = df['type']=='blue' & df['rec_1_outlier']=='False'
df_blue_rec_2 = df['type']=='blue' & df['rec_2_outlier']=='False'

然后,只需将单独的数据帧添加到一个数据帧中。

我有一种感觉,有一种更好的方法来实现这一点。

EN

回答 1

Stack Overflow用户

发布于 2020-05-13 23:20:31

你走在正确的道路上。您所做的是创建一个布尔掩码。如下所示:

代码语言:javascript
复制
mask_blue =((df['type']=='blue') & 
            (df['rec_1_outlier']=='False') & 
            (df['rec_2_outlier']=='False') & 
            (df['rec_3_outlier']=='False') & 
            (df['rec_4_outlier']=='False') 

此掩码提供了与原始df的索引相对应的true/false列表。

代码语言:javascript
复制
df_blue = df.loc[mask_blue,:]

现在,您可以通过更改上面的(:)来选择要传输到df_blue的列。例如:

代码语言:javascript
复制
df_blue = df.loc[mask_blue,['type','rec_1']]

这将得到一个包含以下列的df:typerec_1

更新

要对每个单独的掩码执行此操作,请尝试为每个rec_x创建掩码。这将为真异常值提供NaN值。以下代码是rec_1和rec_2的示例。

代码语言:javascript
复制
df_blue = pd.Datafram()
mask_blue1 =((df['type']=='blue') & (df['rec_1_outlier']=='False'))
df_blue.loc[:,'rec_1'] = df.loc[mask_blue1,'rec_1']
mask_blue2 =((df['type']=='blue') & (df['rec_2_outlier']=='False'))
df_blue.loc[:,'rec_2'] = df.loc[mask_blue2,'rec_2']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61777954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档