仅当另一列的值满足条件时才获取列的分位数
Get quantile of column only if value of another column satisfies condition
我有一个包含多列的数据框。我想要一个 "double sort",在 A 列最低的 50%ile 内,我提取 B 列最低的 50%ile。
A B
3 1.0
5 2.0
7 0.5
9 2.1
在这个例子中,A 的第 50 个百分位会给我前两行。那么,这两个 B 的第 50 个百分位将为 1.5。因此我应该 return 类似 C 列的东西:
A B C
3 1.0 True
5 2.0 False
7 0.5 False
9 2.1 False
以这种方式,重要的是第三行不会变为真。
非常感谢任何帮助!
这就是你想要的吗?
(
df.assign(C=df.A.lt(df.A.quantile(0.5)))
.assign(C=lambda x: x.C & x.B.lt(x.loc[x.C].B.quantile(0.5)))
)
A B C
0 3 1.1 False
1 5 0.9 True
2 7 2.0 False
3 9 2.1 False
第一个赋值创建一个标志来指示 A 是否低于 50% 分位数。
第二个赋值做了两件事:
- 检查 B 是否低于过滤 B 的子集的 50% 分位数
第一个条件
- 对标志 (C) 和上述步骤 1 的结果进行逻辑与运算,并更新 C 列。
我有一个包含多列的数据框。我想要一个 "double sort",在 A 列最低的 50%ile 内,我提取 B 列最低的 50%ile。
A B
3 1.0
5 2.0
7 0.5
9 2.1
在这个例子中,A 的第 50 个百分位会给我前两行。那么,这两个 B 的第 50 个百分位将为 1.5。因此我应该 return 类似 C 列的东西:
A B C
3 1.0 True
5 2.0 False
7 0.5 False
9 2.1 False
以这种方式,重要的是第三行不会变为真。
非常感谢任何帮助!
这就是你想要的吗?
(
df.assign(C=df.A.lt(df.A.quantile(0.5)))
.assign(C=lambda x: x.C & x.B.lt(x.loc[x.C].B.quantile(0.5)))
)
A B C
0 3 1.1 False
1 5 0.9 True
2 7 2.0 False
3 9 2.1 False
第一个赋值创建一个标志来指示 A 是否低于 50% 分位数。
第二个赋值做了两件事:
- 检查 B 是否低于过滤 B 的子集的 50% 分位数 第一个条件
- 对标志 (C) 和上述步骤 1 的结果进行逻辑与运算,并更新 C 列。