我有这个数据框:
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
我想在其中创建过滤器的地方,所以只得到第一行。筛选器具有以下条件:
如何在数据框上应用此类过滤器?
我的代码:
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] 删除。
我来说两句