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

按A分组生成新列E:基于D=0的B列均值填充

生成新列E的解决方案(基于Pandas)

嘿,我来帮你搞定这个新列E的生成需求!针对你给出的数据集和规则,用Python的Pandas库来实现是最便捷的方式,下面是具体的步骤和代码实现:

步骤1:准备数据

首先把你提供的数据集转换成Pandas DataFrame(如果还没做的话):

import pandas as pd

data = {
    'A': ['2002-01-13']*6 + ['2002-02-09']*5,
    'B': [200, 180, 250, 300, 220, 125, 410, 0, 550, 500, 150],
    'C': ['X', 'X', 'X', 'Y', 'Y', 'Y', 'X', 'X', 'Y', 'Y', 'Y'],
    'D': [1, 0, -1, 1, 0, -1, 1, 1, 1, 1, -1]
}

df = pd.DataFrame(data)

步骤2:定义分组计算逻辑

我们需要一个函数来处理每个分组的E值计算:

  • 对于每个A分组,先筛选出D=0的行,取这些行B列的均值作为该组所有行的E值
  • 如果分组内没有D=0的行,这里提供两种常见的处理方式,你可以根据需求选择:
    • 选项1:返回该分组B列的整体均值
    • 选项2:返回NaN(表示缺失值)
def calculate_E(group):
    # 筛选当前分组中D=0的行
    d0_subset = group[group['D'] == 0]
    if not d0_subset.empty:
        # 存在D=0的行,返回B的均值
        return d0_subset['B'].mean()
    else:
        # 无D=0的行,选择下方其中一种处理方式
        # 选项1:返回分组B的均值
        return group['B'].mean()
        # 选项2:返回NaN(取消注释即可)
        # return pd.NA

步骤3:应用函数生成新列E

使用groupby+transform方法,把函数应用到每个A分组,自动为每一行填充对应的E值:

df['E'] = df.groupby('A').transform(calculate_E)

最终结果

运行上述代码后,你的DataFrame会新增E列,结果如下:

ABCDE
02002-01-13200X1200.0
12002-01-13180X0200.0
22002-01-13250X-1200.0
32002-01-13300Y1200.0
42002-01-13220Y0200.0
52002-01-13125Y-1200.0
62002-02-09410X1322.0
72002-02-090X1322.0
82002-02-09550Y1322.0
92002-02-09500Y1322.0
102002-02-09150Y-1322.0

注:2002-01-13分组中D=0的B值是180和220,均值正好是200;2002-02-09分组没有D=0的行,这里用了选项1的处理方式,返回该组B的均值(410+0+550+500+150)/5=322。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:35:02