Pandas:用条件替换列中的值

时间:2018-02-19 15:27:56

标签: python pandas

我有数据框

city_reg     city_live   reg_region    live_region 
 Moscow         Tver        77            69
 Tambov         Tumen'      86            86

如果city_reg

,我需要将city_live中的值替换为reg_region == live_region的值

我尝试使用

df.loc[df.reg_region == df.live_region, 'city_reg'] = df['city_live']

但它回归

ValueError: cannot reindex from a duplicate axis

我该如何解决?

2 个答案:

答案 0 :(得分:2)

使用处理重复索引的masknumpy.where非常好:

#create duplicated indices for test
df.index = [0,0]
print (df)
  city_reg city_live  reg_region  live_region
0   Moscow      Tver          77           69
0   Tambov    Tumen'          86           86

df['city_reg'] = df['city_reg'].mask(df.reg_region == df.live_region,  df['city_live'])

或者:

df['city_reg'] = np.where(df.reg_region == df.live_region,  df['city_reg'], df['city_live'])
print (df)
  city_reg city_live  reg_region  live_region
0   Moscow      Tver          77           69
0   Tumen'    Tumen'          86           86

答案 1 :(得分:2)

试试这个:

mask = df.reg_region == df.live_region
df.loc[mask, 'city_reg'] = df.loc[mask, 'city_live']

#   city_reg city_live  reg_region  live_region
# 0   Moscow      Tver          77           69
# 1   Tumen'    Tumen'          86           86

这样做的原因是当您应用相同的蒙版时,索引在分配的左侧和右侧之间对齐。