Pandas:用条件替换列中的值

2024-09-24 22:24:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有数据帧

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

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

我试着用

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

但它又回来了

ValueError: cannot reindex from a duplicate axis

我该怎么修?你知道吗


Tags: 数据fromlivecitydfreglocregion
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

这样做的原因是,当您应用相同的掩码时,索引在赋值的左侧和右侧之间对齐。你知道吗

使用^{}^{}可以很好地处理重复索引:

#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

相关问题 更多 >