【发布时间】:2022-06-17 06:09:06
【问题描述】:
所以我有这样的dataFrame:
| ID | Age | name |
|---|---|---|
| 1 | 12 | m |
| 1 | 13 | n |
| 1 | 14 | r |
| 1 | 15 | r |
| 2 | 11 | l |
| 2 | 22 | f |
| 2 | 33 | f |
| 2 | 55 | f |
| 3 | 150 | o |
| 3 | 160 | j |
| 3 | 170 | s |
| 3 | 180 | o |
| 4 | 10 | k |
| 4 | 20 | k |
| 4 | 30 | k |
| 4 | 40 | k |
我想先按 ID 分组,然后检查按 dataFrame 分组的 (name) 列的最后一行,如果最后一行相等,就说 'r' 例如我们示例中的 group (1) ,然后检查 group(1) 的 age 列中的最后一行,如果它大于特定数字,假设 name ('r') 是group(1) 中 (name) 列的最后一行,它的最后一行 (age) 应该 >= 15,如果该年龄条件满足,则创建另一个列,表示整个组已满足或不满足。对于 [names] 和 [ages] 列中每个组的最后一行,同样的事情。
所以这些是其他字母(姓名)和他们的(年龄)条件:
在按[ID]分组的dataFrame中,如果最后一行(name)是(r)最后一行(age)应该>=15,如果最后一行(name)是(f)最后一行( age) 应该 >= 55, 如果最后一行 (name) 是 (o) 最后一行 (age) 应该 >= 182 , 如果最后一行 (name) 是 (k) 最后一行 (age) 应该是>= 50。
这是我正在寻找的最后一个输出:
| ID | Age | name | check_condition |
|---|---|---|---|
| 1 | 12 | m | satisfied |
| 1 | 13 | n | satisfied |
| 1 | 14 | r | satisfied |
| 1 | 15 | r | satisfied |
| 2 | 11 | l | satisfied |
| 2 | 22 | f | satisfied |
| 2 | 33 | f | satisfied |
| 2 | 55 | f | satisfied |
| 3 | 150 | o | unsatisfied |
| 3 | 160 | j | unsatisfied |
| 3 | 170 | s | unsatisfied |
| 3 | 180 | o | unsatisfied |
| 4 | 10 | k | unsatisfied |
| 4 | 20 | k | unsatisfied |
| 4 | 30 | k | unsatisfied |
| 4 | 40 | k | unsatisfied |
pandas python 如何做到这一点?
【问题讨论】:
-
我不明白您的预期输出。每一行都应该是不满意的,因为分组
ID为 1,2 和 3 不等于k和ID4 最后一行是k但age<=60 -
所以基本上我需要一个代码来执行以下操作:groupby ID,然后对于按数据集分组,它将转到名称列让我们说组(1),它会检查它的最后一个在我们的例子中是 (r) 的行,所以因为它是 r,所以我需要另一个条件,即进入年龄列并检查 groupby (1) 中的最后一行,如果年龄 >= 15,那么我需要饱和词在新列中
-
是的,这就是您在问题中已经解释的内容,但是您的预期输出是否错误?! ....或者每个 ID 的条件都会发生变化(在同一个 df 中)
-
实际上变化取决于每个 groupby 中名称的最后一行以及年龄列的最后一行
-
所以最后一行是 (r) 年龄应该 >= 15,如果最后一行是 (f) 年龄应该 >= 55,如果最后一行是 (o)年龄应该是 >= 182 ,如果最后一行是 (k) 年龄应该是 >= 50