通过逻辑过滤数据帧

杰夫斯

我有这个数据框:

      MAT MAT_IN  SER D8
0   X     A1  Yes  -
1   X     A2   No  X
2   X     A3   No  X
3   X     A4  Yes  X
4   Y     B1   No  -
5   Y     B2   No  -
6   Y     B3   No  -
7   Y     B4   No  -
8   Y     B5   No  -
9   Z     K1  Yes  -
10   Z     K2   No  -
11   Z     K3   No  X
12   Z     K4  Yes  X

我想在其中创建过滤器的地方,所以只得到第一行。筛选器具有以下条件:

  • 列“ Ser” =“是”和列“ D8” =“-”
  • 组中的其余行(在此情况下为“ MAT”列X)必须具有“ D8” =“ X”列

如何在数据框上应用此类过滤器?

我的代码:

import pandas as pd

data = {'MAT':['X','X','X','X','Y','Y','Y','Y','Y','Z','Z','Z','Z'],
       'MAT_IN':['A1','A2','A3','A4','B1','B2','B3','B4','B5','K1','K2','K3','K4'],
       'SER':['Yes','No','No','Yes','No','No','No','No','No','Yes','No','No','Yes'],
       'D8':['-','X','X','X','-','-','-','-','-','-','-','X','X']}

df1=pd.DataFrame(data, columns=['MAT','MAT_IN','SER','D8'])

df1

任何预期的结果都在D99列中:

MAT MAT_IN  SER D8 D99
0   X     A1  Yes  -  X
1   X     A2   No  X  -
2   X     A3   No  X  -
3   X     A4  Yes  X  -
4   Y     B1   No  -  -
5   Y     B2   No  -  -
6   Y     B3   No  -  -
7   Y     B4   No  -  -
8   Y     B5   No  -  -
9   Z     K1  Yes  -  -
10   Z     K2   No  -  -
11   Z     K3   No  X  -
12   Z     K4  Yes  X  -
耶斯列尔

创建掩码以比较相等的组链接的第一个值,方法是使用方法的倒置掩码&按位AND进行排序Series.duplicated,还链接最后一个掩码,mask2以通过删除每个组的第一行duplicated,比较X并测试DataFrameGroupBy.all是否X每个组中的所有行都没有第一个,用于具有相同大小的系列原始添加Series.map

mask = df1['MAT'].duplicated()
mask2 = df1['MAT'].map(df1.loc[mask, 'D8'].eq('X').groupby(df1['MAT']).all())
mask = df1['SER'].eq('Yes') & ~mask & df1['D8'].eq('-') & mask2
df1['D99'] = np.where(mask, 'X','-')
print (df1)
   MAT MAT_IN  SER D8 D99
0    X     A1  Yes  -   X
1    X     A2   No  X   -
2    X     A3   No  X   -
3    X     A4  Yes  X   -
4    Y     B1   No  -   -
5    Y     B2   No  -   -
6    Y     B3   No  -   -
7    Y     B4   No  -   -
8    Y     B5   No  -   -
9    Z     K1  Yes  -   -
10   Z     K2   No  -   -
11   Z     K3   No  X   -
12   Z     K4  Yes  X   -

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过逻辑过滤数据帧

来自分类Dev

通过字符向量列表过滤数据帧

来自分类Dev

使用布尔逻辑基于多个条件过滤数据帧

来自分类Dev

通过R中的分组复制过滤数据帧

来自分类Dev

通过不同的时间戳格式过滤数据帧

来自分类Dev

r通过包含关键字的列过滤数据帧

来自分类Dev

通过来自不同数据帧的多个条件过滤数据帧

来自分类Dev

数据帧过滤

来自分类Dev

数据帧的列式过滤

来自分类Dev

提取过滤的数据帧

来自分类Dev

通过关联过滤逻辑

来自分类Dev

使用formattable过滤数据帧

来自分类Dev

从JSON输入过滤数据帧

来自分类Dev

如何过滤pyspark数据帧

来自分类Dev

在R中过滤数据帧

来自分类Dev

将数据帧从逻辑转换为数字

来自分类Dev

Pandas 数据帧中的逻辑索引

来自分类Dev

Excel 通过公式逻辑过滤列表

来自分类Dev

如何通过不包含子字符串的单元格过滤熊猫数据帧?

来自分类Dev

通过条件过滤R中的数据帧添加二进制列的任何快速方法?

来自分类Dev

如何通过索引位置过滤掉熊猫数据帧中间的一行

来自分类Dev

通过过滤数据帧输出百分位数

来自分类Dev

如何通过Pyspark中同一数据帧中另一列的正则表达式值过滤数据帧中的列

来自分类Dev

基于多列的NA过滤数据帧

来自分类Dev

如何过滤两列条件的数据帧?

来自分类Dev

火花数据帧中过滤的多种条件

来自分类Dev

根据值等级过滤数据帧

来自分类Dev

分组并过滤Pyspark数据帧

来自分类Dev

迭代过滤条件不同的数据帧