You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Pandas中使用groupby+transform结合多列条件lambda时的异常行为疑问

Pandas中使用groupby+transform结合多列条件lambda时的异常行为疑问

嘿各位Pandas达人,我最近碰到了一个挺费解的问题,想过来请教下!

我的需求是这样的:针对数据里的每个分组,检查指定列的缺失值占比,如果占比超过我设定的60%阈值,就把该列在这个分组下的所有值都替换成NA;要是没超过阈值,就保留原有的值(包括原本就存在的NA)。

为了实现这个逻辑,我尝试用groupby搭配transform,再结合一个带条件判断的lambda函数——核心逻辑就是先计算分组内该列的缺失值占比,根据占比和阈值的对比结果,决定返回原数据还是全NA。大部分情况这个逻辑都正常,但在某些特定条件下会出现奇怪的结果。

下面是我写的可复现代码:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {
    "A" : [np.nan, 4.7, 6.6, np.nan, np.nan, 5.4, 6., 5.3],
    "B" : [np.nan, np.nan, 7.2, 15., np.nan, 5.5, np.nan, np.nan],
    "C" : ["D", "D", "D", "E", "E", "F", "F", "F"]
    }
 )

# 我尝试的实现代码
result = df.groupby("C").transform(lambda x: x if x.isna().mean() <= 0.6 else np.nan)
print(result)

我原本以为这个代码能按预期工作,但实际运行后,部分分组的处理结果和我预想的完全不一样。比如分组D里,列A的缺失率是1/3≈33%(低于60%),应该保留原数据;列B的缺失率是2/3≈66.7%(高于60%),应该把分组D的列B全部换成NA。可实际输出的结果却不符合这个预期,我实在搞不懂哪里出了问题。

有没有大佬能帮我分析下这到底是怎么回事?是我的lambda函数写法有问题,还是groupby.transform的某些特性我没理解透?

备注:内容来源于stack exchange,提问作者TimDdckr

火山引擎 最新活动