如何在pandas(Python)中评估类别而不是书籍?

2024-06-16 09:12:50 发布

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

我完全重新提出了我的问题。我敢肯定现在更合理了。你知道吗

我有以下条件:logic1 & (logic2 | logic3) & logic4。 当至少有一本书满足条件时,Category的所有书都应标记为Evaluated。如何为每个CategoryID执行此操作?你知道吗

评估的逻辑类别

logic1 = (books['CategoryPopulair'] == True)
logic2 = (books['BookTitle'] == 'Hello1') & (books['BookRead'] == True) & (books['BookNice'] == True)
logic3 = (books['BookTitle'].isin(['Hello2', 'Hello3'])) & (books['BookNice'] == True) & (books['BookOld'] == True)
logic4 = (books['BookYear'].isin([393, 1962, 1964, 3295]))

输入

| CategoryID | BookID | BookStatus | BookTitle | BookRead | BookNice | BookOld | BookYear | CategoryPopulair |
|------------|--------|------------|-----------|----------|----------|---------|----------|------------------|
| 337830     | 1      | 4          | Hello1    | TRUE     | TRUE     | TRUE    | 1964     | TRUE             |
| 337830     | 2      | 4          | Hello2    |          | TRUE     | TRUE    | 1964     | TRUE             |
| 337830     | 3      | 1          | Hello3    |          | TRUE     | TRUE    | 1964     | TRUE             |
| 337830     | 4      | 1          | Hello4    |          | TRUE     | TRUE    | 1964     | TRUE             |
| 337830     | 5      | 1          | Hello5    |          | TRUE     | FALSE   | 1964     | TRUE             |
| 337830     | 6      | 1          | Hello6    |          | TRUE     | FALSE   | 1964     | TRUE             |
| 337830     | 7      | 1          | Hello7    |          | TRUE     | TRUE    | 1964     | TRUE             |
| 337830     | 8      | 1          | Hello8    |          | TRUE     | FALSE   | 1964     | TRUE             |
| 337830     | 9      | 1          | Hello9    |          | TRUE     | TRUE    | 1964     | TRUE             |
| 337830     | 10     | 1          | Hello10   |          | TRUE     | FALSE   | 1964     | TRUE             |
| 337830     | 11     | 1          | Hello11   |          | TRUE     | TRUE    | 1964     | TRUE             |
| 337830     | 12     | 1          | Hello12   |          | TRUE     | TRUE    | 1964     | TRUE             |

| 331232     | 1      | 4          | Hello1    | TRUE     | TRUE     | TRUE    | 1964     | TRUE             |
| 331232     | 2      | 4          | Hello2    | TRUE     | TRUE     | TRUE    | 1964     | TRUE             |
| 331232     | 13     | 1          | Hello13   |          | TRUE     | TRUE    | 1964     | TRUE             |
| 331232     | 14     | 1          | Hello14   |          | TRUE     | TRUE    | 1964     | TRUE             |
| 331232     | 5      | 1          | Hello5    |          | TRUE     | FALSE   | 1964     | TRUE             |
| 331232     | 6      | 1          | Hello6    |          | TRUE     | FALSE   | 1964     | TRUE             |
| 331232     | 15     | 1          | Hello15   |          | TRUE     | TRUE    | 1964     | TRUE             |
| 331232     | 8      | 1          | Hello8    |          | TRUE     | FALSE   | 1964     | TRUE             |
| 331232     | 9      | 1          | Hello9    |  TRUE    | TRUE     | TRUE    | 1964     | TRUE             |
| 331232     | 10     | 1          | Hello10   |          | TRUE     | FALSE   | 1964     | TRUE             |
| 331232     | 17     | 1          | Hello17   |  TRUE    | TRUE     | TRUE    | 1964     | TRUE             |
| 331232     | 16     | 1          | Hello16   |          | TRUE     | TRUE    | 1964     | TRUE             |

我需要的输出(见列CategoryEvaluated)

CategoryID331232的BookID2的BookOld列中的FALSE导致CategoryEvaluated为FALSE。你知道吗

| CategoryID | BookID | BookStatus | BookTitle | BookRead | BookNice | BookOld | BookYear | CategoryPopulair | CategoryEvaluated |
|------------|--------|------------|-----------|----------|----------|---------|----------|------------------|-------------------|
| 337830     | 1      | 4          | Hello1    | TRUE     | TRUE     | TRUE    | 1964     | TRUE             | TRUE              |
| 337830     | 2      | 4          | Hello2    |          | TRUE     | TRUE    | 1964     | TRUE             | TRUE              |
| 337830     | 3      | 1          | Hello3    |          | TRUE     | TRUE    | 1964     | TRUE             | TRUE              |
| 337830     | 4      | 1          | Hello4    |          | TRUE     | TRUE    | 1964     | TRUE             | TRUE              |
| 337830     | 5      | 1          | Hello5    |          | TRUE     | FALSE   | 1964     | TRUE             | TRUE              |
| 337830     | 6      | 1          | Hello6    |          | TRUE     | FALSE   | 1964     | TRUE             | TRUE              |
| 337830     | 7      | 1          | Hello7    |          | TRUE     | TRUE    | 1964     | TRUE             | TRUE              |
| 337830     | 8      | 1          | Hello8    |          | TRUE     | FALSE   | 1964     | TRUE             | TRUE              |
| 337830     | 9      | 1          | Hello9    |          | TRUE     | TRUE    | 1964     | TRUE             | TRUE              |
| 337830     | 10     | 1          | Hello10   |          | TRUE     | FALSE   | 1964     | TRUE             | TRUE              |
| 337830     | 11     | 1          | Hello11   |          | TRUE     | TRUE    | 1964     | TRUE             | TRUE              |
| 337830     | 12     | 1          | Hello12   |          | TRUE     | TRUE    | 1964     | TRUE             | TRUE              |

| 331232     | 1      | 4          | Hello1    | TRUE     | TRUE     | TRUE    | 1964     | TRUE             | FALSE             |
| 331232     | 2      | 4          | Hello2    | TRUE     | TRUE     |->FALSE<-| 1964     | TRUE             | FALSE             |
| 331232     | 13     | 1          | Hello13   |          | TRUE     | TRUE    | 1964     | TRUE             | FALSE             |
| 331232     | 14     | 1          | Hello14   |          | TRUE     | TRUE    | 1964     | TRUE             | FALSE             |
| 331232     | 5      | 1          | Hello5    |          | TRUE     | FALSE   | 1964     | TRUE             | FALSE             |
| 331232     | 6      | 1          | Hello6    |          | TRUE     | FALSE   | 1964     | TRUE             | FALSE             |
| 331232     | 15     | 1          | Hello15   |          | TRUE     | TRUE    | 1964     | TRUE             | FALSE             |
| 331232     | 8      | 1          | Hello8    |          | TRUE     | FALSE   | 1964     | TRUE             | FALSE             |
| 331232     | 9      | 1          | Hello9    |  TRUE    | TRUE     | TRUE    | 1964     | TRUE             | FALSE             |
| 331232     | 10     | 1          | Hello10   |          | TRUE     | FALSE   | 1964     | TRUE             | FALSE             |
| 331232     | 17     | 1          | Hello17   |  TRUE    | TRUE     | TRUE    | 1964     | TRUE             | FALSE             |
| 331232     | 16     | 1          | Hello16   |          | TRUE     | TRUE    | 1964     | TRUE             | FALSE             |

Tags: falsetruebookshello1hello2categoryidhello5booktitle
1条回答
网友
1楼 · 发布于 2024-06-16 09:12:50

编辑以更好地回答您的问题。你知道吗

因为any()可能有点棘手,我倾向于创建一个布尔列,然后对每个组求值。你将对每本书进行逻辑分析,然后检查是否有任何一本书符合标准。你知道吗

books['FitsLogic'] = logic1 & (logic2 | logic3) & logic4
books['CategoryEvaluted'] = books['FitsLogic'].groupby(books['CategoryID']).transform(
                               lambda x: True if any(x) else False)

相关问题 更多 >