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

如何在Pandas分组(groupby)后仅对单个列执行插值(interpolate)?

Pandas分组内仅对单列执行插值操作

在对DataFrame按filename分组插值时,若只想针对单个列(如val2)处理,直接在apply中提取单列操作会导致其他列丢失。以下是具体的解决方法:

输入数据

filename    val1    val2
t                   
1   file1.csv   5       10
2   file1.csv   NaN     NaN
3   file1.csv   15      20
6   file2.csv   NaN     NaN
7   file2.csv   10      20
8   file2.csv   12      15

期望输出

filename    val1    val2
t                   
1   file1.csv   5       10
2   file1.csv   NaN     15
3   file1.csv   15      20
6   file2.csv   NaN     NaN
7   file2.csv   10      20
8   file2.csv   12      15

问题分析

你之前的代码仅返回插值后的val2列,是因为lambda表达式直接返回了group['val2'].interpolate(...),相当于只提取了目标列,原DataFrame的其他列被丢弃。

解决方案

方法1:使用transform(推荐)

transform会将分组内的计算结果映射回原DataFrame的对应位置,完美保留其他列数据:

df['val2'] = df.groupby('filename')['val2'].transform(lambda x: x.interpolate(method='index'))

方法2:使用apply配合assign

通过assign在原分组数据上修改val2列,返回完整的分组结果:

df = df.groupby('filename').apply(lambda group: group.assign(val2=group['val2'].interpolate(method='index'))).reset_index(drop=True)

如果不需要重置索引,可以去掉.reset_index(drop=True)。

两种方法都能实现仅对val2列按组插值,同时保留filename、val1列的原始数据,得到符合预期的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:25:21