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

Python Pandas:如何基于town列条件更新DataFrame的Points列值?

问题场景

给定如下Pandas DataFrame:

import pandas as pd
df = pd.DataFrame([['KALLANG/WHAMPOA', '2 ROOM', '01 TO 03', 47.0, 'IMPROVED', 92000.0, 0],
 ['QUEENSTOWN', '2 ROOM', '01 TO 03', 45.0, 'STANDARD', 185000.0, 0],
 ['QUEENSTOWN', '2 ROOM', '01 TO 03', 45.0, 'STANDARD', 205500.0, 0],
 ['TOA PAYOH', '2 ROOM', '01 TO 03', 45.0, 'IMPROVED', 248000.0, 0],
 ['JURONG WEST', '2 ROOM', '01 TO 03', 44.0, 'MODEL A', 181000.0, 0]], columns=['town', 
'flat_type', 'storey_range', 'floor_area_sqm', 'flat_model', 'resale_price', 'Points'])

需要为town == 'QUEENSTOWN'的行,在Points列上加5。尝试执行df[(df['town'] == 'QUEENSTOWN')]['Points']+5后,未成功更新原DataFrame,需正确实现方法。

问题原因

你使用的链式索引df[(df['town'] == 'QUEENSTOWN')]['Points']返回的通常是原DataFrame的临时副本,而非原数据的引用,因此对副本的修改不会同步到原DataFrame中。

正确实现方法

方法1:使用.loc直接修改原DataFrame(推荐)

.loc是Pandas官方推荐的行/列定位方法,可直接修改原数据:

df.loc[df['town'] == 'QUEENSTOWN', 'Points'] += 5

执行后,原DataFrame中QUEENSTOWN对应的Points值会从0变为5。

方法2:使用numpy.where批量赋值

适合批量条件替换场景,生成新列值覆盖原列:

import numpy as np
df['Points'] = np.where(df['town'] == 'QUEENSTOWN', df['Points'] + 5, df['Points'])

逻辑:满足条件的行Points加5,不满足的保持原值。

方法3:创建新DataFrame(不修改原数据)

如果需要保留原DataFrame,可使用assign生成新的DataFrame:

new_df = df.assign(
    Points=lambda x: x['Points'] + 5 if x['town'] == 'QUEENSTOWN' else x['Points']
)

或更直观的apply写法:

new_df = df.assign(
    Points=df.apply(lambda row: row['Points'] + 5 if row['town'] == 'QUEENSTOWN' else row['Points'], axis=1)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:41:15