You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Lambda函数在Pandas DataFrame中生成均值比较布尔列

解决方法

你的代码存在两个核心问题:一是语法错误(lambda里错误使用了生成器表达式),二是逻辑错误——没有按chems分组比较,而是直接对全表的lot均值做全局判断,完全不符合"每个chems分组内比较"的需求。

以下是正确的实现步骤:

步骤1:计算每个chems分组内两个lot的均值

先按chems分组,分别提取lot=9849和lot=7711的value均值:

import pandas as pd
import numpy as np

# 示例DataFrame(可替换为你的实际数据)
data = {
    'chems': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
    'lot': ['9849', '9849', '7711', '7711', '9849', '9849', '7711', '7711'],
    'value': [10, 20, 5, 15, 8, 12, 15, 25]
}
df = pd.DataFrame(data)

# 分组计算两个lot的均值
grouped_means = df.groupby('chems').apply(
    lambda g: pd.Series({
        'mean_9849': g[g['lot'] == '9849']['value'].mean(),
        'mean_7711': g[g['lot'] == '7711']['value'].mean()
    })
).reset_index()

步骤2:生成每个chems对应的布尔结果

在分组均值表中添加判断列,得到每个chems的比较结果:

grouped_means['Boolean'] = grouped_means['mean_9849'] > grouped_means['mean_7711']
# 如果需要字符串类型的'True'/'False'而非布尔值,可转类型:
# grouped_means['Boolean'] = (grouped_means['mean_9849'] > grouped_means['mean_7711']).astype(str)

步骤3:将结果映射回原DataFrame

通过chems列将分组结果匹配到原表的每一行:

df = df.merge(grouped_means[['chems', 'Boolean']], on='chems', how='left')

简洁版实现

如果追求代码简洁,可以合并步骤:

# 直接生成每个chems的判断结果并映射
df['Boolean'] = df['chems'].map(
    df.groupby('chems').apply(
        lambda g: g[g['lot'] == '9849']['value'].mean() > g[g['lot'] == '7711']['value'].mean()
    )
).astype(str)  # 若不需要字符串可去掉astype(str)

示例输出

运行上述代码后,示例DataFrame的结果为:

chemslotvalueBoolean
A984910True
A984920True
A77115True
A771115True
B98498False
B984912False
B771115False
B771125False

内容的提问来源于stack exchange,提问作者PZA_666

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:24:31