python中标记的多个and或条件

2024-07-03 06:02:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在pd数据帧中有以下数据:

棉条和其他(如所有Multi’s-Multi\ U A等)的切断如下:

d_id    Sliver  Multi_A Multi_B Multi_C Multi_D no_of_prem  Flag_Sliver
5       4.80    53.05   19.07   13.59   0       3           No
18      5.17    27.63   26.83   12.15   0       3           No
25      1.28    0.14    0.12    0       0       2           Yes
32      0.90    0.43    0.94    0       0       2           No
33      3.69    3.24    0.77    1.36    0       3           No
34      0.15    11.62   5.92    1.42    0       3           No
55      0.31    11.29   5.95    1.02    0       3           No
64      0.25    0.82    2.77    0       0       2           No
86      0.02    9.65    1.82    0.10    0       3           No
89      0.13    3.19    1.55    1.77    0       3           No

Sliver  5
Multis  0.15

如果任何d\u id的值小于5,并且该d\u id的任意两个multi(总共有4个multi)的值小于0.15,则标志变量被赋予Yes或No。在上面的示例中,只有25个满足条件,因此被标记为Yes。你知道吗

有人能帮我解决这些问题吗?你知道吗


Tags: of数据noid标志multiyesflag
1条回答
网友
1楼 · 发布于 2024-07-03 06:02:16

按条件使用^{}

mask = df.filter(like='Multi').lt(.15).all(1) & df['Sliver'].lt(5)
#alternative
#mask = df.drop(['d_id','no_of_prem', 'Sliver'], axis=1).lt(.15).all(1) & df['Sliver'].lt(5)
df['Flag_Sliver'] = np.where(mask, 'Yes' ,'No')
print (df)
   d_id  Sliver  Multi_A  Multi_B  Multi_C  Multi_D  no_of_prem Flag_Sliver
0     5    4.80    53.05    19.07    13.59        0           3          No
1    18    5.17    27.63    26.83    12.15        0           3          No
2    25    1.28     0.14     0.12     0.00        0           2         Yes
3    32    0.90     0.43     0.94     0.00        0           2          No
4    33    3.69     3.24     0.77     1.36        0           3          No
5    34    0.15    11.62     5.92     1.42        0           3          No
6    55    0.31    11.29     5.95     1.02        0           3          No
7    64    0.25     0.82     2.77     0.00        0           2          No
8    86    0.02     9.65     1.82     0.10        0           3          No
9    89    0.13     3.19     1.55     1.77        0           3          No

解释:

首先按^{}^{}不必要的列选择所有Multi列:

print (df.filter(like='Multi'))
#print (df.drop(['d_id','no_of_prem', 'Sliver'], axis=1))

   Multi_A  Multi_B  Multi_C  Multi_D
0    53.05    19.07    13.59        0
1    27.63    26.83    12.15        0
2     0.14     0.12     0.00        0
3     0.43     0.94     0.00        0
4     3.24     0.77     1.36        0
5    11.62     5.92     1.42        0
6    11.29     5.95     1.02        0
7     0.82     2.77     0.00        0
8     9.65     1.82     0.10        0
9     3.19     1.55     1.77        0

.15^{}<)比较:

print (df.filter(like='Multi').le(.15))
   Multi_A  Multi_B  Multi_C  Multi_D
0    False    False    False     True
1    False    False    False     True
2     True     True     True     True
3    False    False     True     True
4    False    False    False     True
5    False    False    False     True
6    False    False    False     True
7    False    False     True     True
8    False    False     True     True
9    False    False    False     True

通过^{}仅获取True的所有行:

print (df.filter(like='Multi').le(.15).all(1))
0    False
1    False
2     True
3    False
4    False
5    False
6    False
7    False
8    False
9    False
dtype: bool

同时比较Sliver列:

print (df['Sliver'].lt(5))
0     True
1    False
2     True
3     True
4     True
5     True
6     True
7     True
8     True
9     True
Name: Sliver, dtype: bool

并通过&AND)链接:

mask = df.filter(like='Multi').lt(.15).all(1) & df['Sliver'].lt(5)
print (mask)
0    False
1    False
2     True
3    False
4    False
5    False
6    False
7    False
8    False
9    False
dtype: bool

相关问题 更多 >