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

如何对含数据簇/邻域的DataFrame按分组单独应用函数

实现方案

电子表格(Excel/WPS表格)实现

逻辑很简单:先通过ROUND函数对Data1取整到百位得到所属簇的中心值,再用SUMIF按簇求和即可,公式直接下拉就能批量生成Result1列。
假设你的数据A列为Data1、B列为Value1,数据从第2行开始,C2单元格输入以下公式:

=SUMIF($A:$A,ROUND(A2,-2),$B:$B)

*公式说明:ROUND(A2,-2)会自动把99/100/101/102归为100簇,199/200/201归为200簇,完全匹配你的示例场景。如果簇的间隔不是100,可以把ROUND换成自定义的if判断逻辑,比如IF(ABS(A2-100)<10,100,200)手动指定邻域阈值。

Python Pandas实现

适合处理大量数据或者簇规则更复杂的场景,两种常用实现逻辑:

已知簇中心的情况

如果提前知道簇的中心是100、200,直接按距离打标签再分组求和:

import pandas as pd

# 构造示例数据,实际使用时替换为pd.read_csv()读取你的数据即可
df = pd.DataFrame({
    'Data1': [99,100,101,102,199,200,201],
    'Value1': [1,2,3,4,5,6,7]
})

# 按距离最近的中心打簇标签
cluster_centers = [100, 200]
df['cluster'] = df['Data1'].apply(lambda x: min(cluster_centers, key=lambda c: abs(x - c)))

# 按簇分组求和,映射回原表
df['Result1'] = df.groupby('cluster')['Value1'].transform('sum')

未知簇中心的情况

如果只知道簇内相邻点差值小、簇间差值大,自动识别簇分界:

# 先按Data1排序
df = df.sort_values('Data1').reset_index(drop=True)
# 相邻Data1差值超过50即判定为新簇,阈值可根据你的数据调整
df['cluster'] = (df['Data1'].diff() > 50).cumsum()
# 分组求和
df['Result1'] = df.groupby('cluster')['Value1'].transform('sum')

运行后输出的df就包含你需要的Result1列,结果和示例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:09:03