如何用对应分组的指定列数值之和替换DataFrame中的NA值?
解决DataFrame中连续NA值替换为分组Distance和的问题
我来帮你搞定这个需求!你需要把Distance2列里的连续NA值,替换成对应分组的Distance列数值之和,下面是具体的实现方案,完全匹配你的预期结果:
原始数据
Distance Distance2 0 160 8.0 1 20 NaN 2 30 15.0 3 100 11.0 4 35 NaN 5 42 NaN 6 10 NaN 7 10 2.0 8 9 NaN 9 20 NaN
期望处理结果
Distance Distance2 0 160 8.0 1 20 20.0 2 30 15.0 3 100 11.0 4 35 87.0 5 42 87.0 6 10 87.0 7 10 2.0 8 9 29.0 9 20 29.0
具体实现代码(基于pandas)
import pandas as pd import numpy as np # 1. 构造你的原始数据(如果已有数据可跳过这一步) df = pd.DataFrame({ 'Distance': [160, 20, 30, 100, 35, 42, 10, 10, 9, 20], 'Distance2': [8, np.nan, 15, 11, np.nan, np.nan, np.nan, 2, np.nan, np.nan] }) # 2. 创建分组标识:以Distance2的非NA值为分隔,标记连续NA的分组 df['group'] = df['Distance2'].notna().cumsum() # 3. 计算每个分组的Distance总和,并填充到Distance2的NA位置 df['Distance2'] = df['Distance2'].fillna(df.groupby('group')['Distance'].transform('sum')) # 4. 移除临时的group列(可选操作) df = df.drop('group', axis=1) print(df)
代码逻辑解释
- 分组标识创建:
df['Distance2'].notna().cumsum()会把每一个Distance2非空的位置作为分组的起点,自动给连续的NA值分配同一个分组ID,比如第4-6行的NA会属于同一个分组,第8-9行的NA属于另一个分组。 - 分组求和填充:通过
groupby('group')['Distance'].transform('sum')计算每个分组的Distance总和,再用fillna()把Distance2的NA值替换成对应分组的总和,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者jorginho97
相关产品推荐
相关产品推荐

