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

如何使用Pandas提取分组均值结果第二行的数值并添加至原DataFrame

用户问题

我拥有一个名为train的DataFrame,包含business_code、cust_number、name_customer、clear_date、buisness_year、doc_id、posting_date、due_in_date、baseline_create_date、cust_payment_terms、converted_usd等列,数据行数约为9800行,部分数据如下:

business_codecust_numbername_customerclear_datebuisness_year
U0010200769623WAL-MAR corp2020-02-112020.0
U0010200980828BEN E2019-08-082019.0
U0010200792734MDV/ trust2019-12-302019.0
U0010200769623WAL-MAR foundation2019-11-252019.0
CA020140106181THE corporation2019-12-042019.0
doc_idposting_datedue_in_datebaseline_create_datecust_payment_termsconverted_usd
1.930438e+092020-01-262020-02-102020-01-26NAH454273.28
1.929646e+092019-07-222019-08-112019-07-22NAD179656.6
1.929874e+092019-09-142019-09-292019-09-14NAA82253.86
1.930148e+092019-11-132019-11-282019-11-13NAH433133.29
2.960581e+092019-09-202019-10-042019-09-24CA1015558.088

我已使用Pandas的groupby方法执行如下操作:

dt=train.groupby('name_customer')['delay'].mean(numeric_only=False)

打印dt后得到如下结果:

name_customer
11078 us                17.0
17135 associates       -10.0
17135 llc               -3.0
236008 associates       -3.0
99 CE                    2.0
...
YEN BROS corp            0.0
YEN BROS corporation    -0.5
YEN BROS llc            -2.0
ZARCO co                -1.0
ZIYAD us                 6.0
Name: delay, Length: 3889, dtype: float64

请问是否有办法提取dt(分组均值结果)中第二行的均值数值,并将其添加到train数据集中?我刚接触CSV和DataFrame,若问题表述不当敬请谅解。


解决方案

没问题,刚接触Pandas很正常,我来一步步帮你搞定这个需求!

首先,你得到的dt是一个Pandas Series对象,索引是客户名称,值是对应的延迟均值。要提取第二行的数值并添加到train里,分两步来:

1. 提取第二行的均值和对应客户

因为Series的索引是从0开始计数的,第二行对应的索引就是1,用iloc就能快速定位:

# 提取第二行的均值数值
second_mean = dt.iloc[1]
# 如果需要知道这个均值对应的客户名称,可以这么获取
target_customer = dt.index[1]

执行后,second_mean就是你要的-10.0,target_customer就是"17135 associates"。

2. 将数值添加到train数据集

这里分两种常见的场景,你可以根据自己的需求选择:

场景一:给整个train新增一列,所有行都填充这个第二行的均值

如果只是想给所有行都加上这个固定值,直接赋值就行:

train['selected_group_mean'] = second_mean

这样train里就多了一列selected_group_mean,所有行的值都是-10.0。

场景二:只给对应客户的行添加这个均值,其他行留空

如果是想仅给name_customer为"17135 associates"的行标记这个均值,其他行用空值(NaN)填充,可以用numpy的where函数:

import numpy as np
train['selected_group_mean'] = np.where(train['name_customer'] == target_customer, second_mean, np.nan)

这样只有匹配的行会显示-10.0,其他行显示NaN,方便后续筛选或处理。

额外补充:如果想把所有分组的均值都合并到train里

如果你其实是想给每个客户的行都添加上对应的分组均值(而不只是第二行),不用手动提取,用transform或者merge更高效:

# 方法1:用transform直接生成新列,最简便
train['customer_delay_mean'] = train.groupby('name_customer')['delay'].transform('mean', numeric_only=True)

# 方法2:把dt转成DataFrame后用merge合并
dt_df = dt.reset_index(name='customer_delay_mean')
train = train.merge(dt_df, on='name_customer', how='left')

这两种方法都会自动把每个客户的延迟均值对应到train的每一行,适合批量处理所有分组的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:12:45