如何为pandas DataFrame中value1列绝对值相同的行分配相同value2值
实现思路
按value1的绝对值对行分组,将每组内已存在的非空value2值填充到组内所有行。如果某组内没有非空的value2值,填充后仍保持NaN。
实现代码
方案1:使用groupby + transform(推荐)
该方法逻辑简洁,适合同组内非空value2值统一的场景:
import pandas as pd import numpy as np # 构造示例DataFrame d = {'value1': [1, 2, 3, -4, 5, -1, -7, -2, 4, -5], 'value2': [100, 200, 200, 300, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]} df = pd.DataFrame(data=d) # 核心逻辑:按value1的绝对值分组,取每组第一个非空value2填充全组 df['value2'] = df.groupby(df['value1'].abs())['value2'].transform('first') print(df)
方案2:使用映射表匹配
如果需要提前确认绝对值和value2的对应关系,可以先构造映射字典再匹配:
# 构造绝对值到value2的映射字典 value_map = df.dropna(subset=['value2']).set_index(df['value1'].abs())['value2'].to_dict() # 匹配填充 df['value2'] = df['value1'].abs().map(value_map)
输出结果
运行后得到的DataFrame和期望结果完全一致:
value1 value2 0 1 100.0 1 2 200.0 2 3 200.0 3 -4 300.0 4 5 NaN 5 -1 100.0 6 -7 NaN 7 -2 200.0 8 4 300.0 9 -5 NaN
内容的提问来源于stack exchange,提问作者sampeterson
相关产品推荐
相关产品推荐

