pandas 如何基于条件创建掩码布尔数据框

e3bfsja2  于 2023-04-19  发布在  其他
关注(0)|答案(3)|浏览(100)

我有一个 Dataframe 如下;

|may | apr | mar |feb|jan|dec|
| -- | ----|-----|---|---|---|
| 0  | 0   |  0  | 1 |2  | 3 |
| 1  | 2   |  3  | 4 |5  | 6 |
| 1  | 2   |  2  | 2 |2  | 3 |
| 0  | 0   |  1  | 2 |2  | 3 |

我想要掩码布尔数据,其中每行的1和前2为True
预期产出如下;

|may     | apr   | mar    |feb    |jan   |dec   |
| --     | ----  |-----   |---    |---   |---   |
| False  | False |  False | True  |True  | False|
| True   | True  |  False | False |False | False|
| True   | True  |  False | False |False |False |
| False  | False | True   | True  |False | False|
9njqaruj

9njqaruj1#

两步条件组合检查

out = df.eq(1) | (df.eq(2) & (df.eq(2).cumsum(axis=1)==1))
Out[28]: 
     may    apr    mar    feb    jan    dec
0  False  False  False   True   True  False
1   True   True  False  False  False  False
2   True   True  False  False  False  False
3  False  False   True   True  False  False
bnlyeluc

bnlyeluc2#

另一种可能的解决方案:

(df.T.eq(1) | df.T.ne(2).cummin().diff().fillna(False)).T

或者:

(df.eq(1) | df.ne(2).cummin(axis=1).astype(int).diff(axis=1).fillna(0).astype(bool))

输出

may    apr    mar    feb    jan    dec
0  False  False  False   True   True  False
1   True   True  False  False  False  False
2   True   True  False  False  False  False
3  False  False   True   True  False  False
yh2wf1be

yh2wf1be3#

只需要使用一个布尔表达式。

import pandas as pd
df = pd.DataFrame({"may": [1,2,3,4,5], "apr": [4,5,6,7,8], "mar": [9, 10, 11, 12, 13]})

ndf = (df == 1) | (df == 2)

相关问题