【发布时间】:2021-10-28 11:59:43
【问题描述】:
在一个数据集中,我有四列名为 TP1、TP2 等(代表测试阶段 1,2...)。这些列中的信息可以是以下 5 种之一:Not_tested、Not_finished、too_low、150 到 190 之间的值,以及什么都没有。
当一个元素在 4 列中的任何一列中至少显示一次时,该元素被视为已测试:too_low 或介于 150 和 190 之间的值。如果该元素的行中的任何点均未显示这 2 个值,则认为未测试。
我需要报告以下内容:
“测试元素的数量:43(以及所有元素的百分比)”(相当于有多少行显示 too_low 或 150 到 190 之间的值)
“新测试元素的数量:# 和 %”(所以从上面找到的元素中,NEW 列中有 YES?)
“旧测试元素的数量:# 和 %”(取而代之的是 NO)
部分数据集的示例如下所示:
+=======+==========+=====+======+==============+=========+==============+=====+
| ID | Location | NEW | YEAR | PT1 | PT2 | PT3 | PT4 |
+=======+==========+=====+======+==============+=========+==============+=====+
| GF342 | Q1 | YES | 2021 | | | | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| IF874 | Q3 | NO | 2018 | NOT_TESTED | | TOO_LOW | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| FH386 | Q1 | NO | 2019 | | | | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| KJ190 | Q3 | YES | 2021 | NOT_FINISHED | | TOO_LOW | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| TY748 | Q3 | YES | 2021 | | | | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| YT947 | Q4 | NO | 2019 | | TOO_LOW | | 165 |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| DF063 | Q3 | NO | 2019 | 180 | | | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| ET512 | Q1 | YES | 2021 | | | | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| GC714 | Q2 | NO | 2018 | | 160 | | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| SD978 | Q3 | NO | 2019 | | TOO_LOW | | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| EF472 | Q1 | NO | 2018 | | | | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| PL489 | Q2 | YES | 2021 | | | NOT_FINISHED | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| AZ315 | Q1 | NO | 2018 | TOO_LOW | | | 180 |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| OL821 | Q1 | YES | 2021 | | | 185 | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| HN765 | Q3 | YES | 2021 | 155 | | | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
| ED589 | Q1 | YES | 2021 | | | 165 | |
+-------+----------+-----+------+--------------+---------+--------------+-----+
我解决这个问题的想法是使用包含必要值的所有行的 .sum() ,但是我如何制定一个规则,即只有在这些值存在时才计算它?我是否可以使用 T 或 F 在数据框中添加一个新列,具体取决于它是否满足具有 too_low 或数字(150-190)的规则。我对这一切都很陌生,不知道该怎么做。我不一定要直接回答,但如果可能的话,请对问题提供一些指导,谢谢。
数据框:
pd.DataFrame({'ID': {0: 'GF342', 1: 'IF874', 2: 'FH386', 3: 'KJ190', 4: 'TY748', 5: 'YT947', 6: 'DF063', 7: 'ET512', 8: 'GC714', 9: 'SD978', 10: 'EF472', 11: 'PL489', 12: 'AZ315', 13: 'OL821', 14: 'HN765', 15: 'ED589'}, 'Location': {0: 'Q1', 1: 'Q3', 2: 'Q1', 3: 'Q3', 4: 'Q3', 5: 'Q4', 6: 'Q3', 7: 'Q1', 8: 'Q2', 9: 'Q3', 10: 'Q1', 11: 'Q2', 12: 'Q1', 13: 'Q1', 14: 'Q3', 15: 'Q1'}, 'NEW': {0: 'YES', 1: 'NO', 2: 'NO', 3: 'YES', 4: 'YES', 5: 'NO', 6: 'NO', 7: 'YES', 8: 'NO', 9: 'NO', 10: 'NO', 11: 'YES', 12: 'NO', 13: 'YES', 14: 'YES', 15: 'YES'}, 'YEAR': {0: 2021, 1: 2018, 2: 2019, 3: 2021, 4: 2021, 5: 2019, 6: 2019, 7: 2021, 8: 2018, 9: 2019, 10: 2018, 11: 2021, 12: 2018, 13: 2021, 14: 2021, 15: 2021}, 'PT1': {0: '', 1: 'NOT_TESTED', 2: '', 3: 'NOT_FINISHED', 4: '', 5: '', 6: '180', 7: '', 8: '', 9: '', 10: '', 11: '', 12: 'TOO_LOW', 13: '', 14: '155', 15: ''}, 'PT2': {0: '', 1: '', 2: '', 3: '', 4: '', 5: 'TOO_LOW', 6: '', 7: '', 8: '160', 9: 'TOO_LOW', 10: '', 11: '', 12: '', 13: '', 14: '', 15: ''}, 'PT3': {0: '', 1: 'TOO_LOW', 2: '', 3: 'TOO_LOW', 4: '', 5: '', 6: '', 7: '', 8: '', 9: '', 10: '', 11: 'NOT_FINISHED', 12: '', 13: '185', 14: '', 15: '165'}, 'PT4': {0: '', 1: '', 2: '', 3: '', 4: '', 5: 165.0, 6: '', 7: '', 8: '', 9: '', 10: '', 11: '', 12: 180.0, 13: '', 14: '', 15: ''}})
【问题讨论】:
-
能否提供
pd.DataFrame()格式的数据? -
pd.Dataframe({'ID': {0L: 'GF342', 1L: 'IF874', 2L: 'FH386', 3L: 'KJ190', 4L: 'TY748'}, 'Location': {0L: 'Q1', 1L: 'Q3', 2L: 'Q1', 3L: 'Q3', 4L: 'Q3'}, 'YEAR': {0L: 2021L, 1L: 2018L, 2L: 2019L, 3L: 2021L, 4L: 2021L}, 'NEW': {0L: 'YES', 1L: 'NO', 2L: 'NO', 3L: 'YES', 4L: 'YES'}, 'PT4': {0L: nan, 1L: nan, 2L: nan, 3L: nan, 4L: nan}, 'PT3': {0L: nan, 1L: 'TOO_LOW', 2L: nan, 3L: 'TOO_LOW', 4L: nan}, 'PT2': {0L: nan, 1L: nan, 2L: nan, 3L: nan, 4L: nan}, 'PT1': {0L: nan, 1L: 'NOT_TESTED', 2L: nan, 3L: 'NOT_FINISHED', 4L: nan}})我希望这就是你的意思。
标签: python pandas python-2.7 dataset