Pandas按条件将datum3、value3值映射到datum2、value2列的实现问题
问题原因
你原来的写法df['value2']=df['value3'][df['datum2']=='NGVD29']中,右侧只对满足datum2 == 'NGVD29'的行返回对应value3的值,其余行返回NaN,直接赋值给整列value2时,不满足条件的行就会被覆盖为NaN,这就是其他行value2被清空的原因。
正确实现方式
使用loc同时限定赋值的行范围,只对满足条件的行做修改,不影响其余行的原值:
# 先筛选出datum2为NGVD29的行 mask = df['datum2'] == 'NGVD29' # 对满足条件的行,分别替换datum2和value2的值 df.loc[mask, 'datum2'] = df.loc[mask, 'datum3'] df.loc[mask, 'value2'] = df.loc[mask, 'value3'] # 操作完成后删除不需要的列 df = df.drop(columns=['datum3', 'value3'])
内容的提问来源于stack exchange,提问作者Mr. Geologist
相关产品推荐
相关产品推荐

