英文:
how to create a mask Boolean data frame based on a condition
问题
以下是已翻译的数据部分:
我有一个数据框如下;
|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|
英文:
I have a data frame as follows;
|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 |
I want mask Boolean data where I would have True for 1s and first 2 in each row
Expected output is as follows;
|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|
答案1
得分: 2
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
英文:
Check with two steps conditions combination
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
答案2
得分: 1
另一个可能的解决方案:
(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))
输出:
五月 四月 三月 二月 一月 十二月
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
英文:
Another possible solution:
(df.T.eq(1) | df.T.ne(2).cummin().diff().fillna(False)).T
Or:
(df.eq(1) | df.ne(2).cummin(axis=1).astype(int).diff(axis=1).fillna(0).astype(bool))
Output
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
答案3
得分: 0
只使用布尔表达式。
英文:
Just use a boolean expression.
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)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论