根据另一列的条件修改Pandas DataFrame列

时间:2017-12-30 00:32:14

标签: python pandas numpy

如果DataFrame有两列:

df=pd.DataFrame({'City':['New York', 'New jersey', 'California'], 'Population':[100000, 500000, 300000]})

如果City是'New York'或'California',我想在填充列中添加1000。我尝试过代码,但它没有改变原来的DF

df[(df['City']=='New York') | (df['City']=='California')]['Population']+1000

请告知是否有多种方法。

2 个答案:

答案 0 :(得分:0)

df.loc[(df['City']=='New York') | (df['City']=='California'), 'Population'] += 1000

解决方案几乎就像用+替换+=一样简单:

df[(df['City']=='New York') | (df['City']=='California')]['Population'] += 1000

但这会抛出一个SettingWithCopyWarning。 (关于该警告的进一步阅读是here。)

答案 1 :(得分:0)

这是一个更具可读性的解决方案:

df.Population += df.City.isin(['New York', 'California']) * 1000

您可以使用isin代替那个长逻辑表达式。它返回一个布尔向量,可以乘以1000并添加到填充列。

不要忘记+会返回一个新系列(DataFrame的列)。如果要修改现有版本,则必须使用+=将其分配回来。