[英]Pandas: replace values in column with condition
I have dataframe 我有数据框
city_reg city_live reg_region live_region
Moscow Tver 77 69
Tambov Tumen' 86 86
I need to replace values in city_reg
to values from city_live
if reg_region == live_region
我需要替换值
city_reg
从到值city_live
如果reg_region == live_region
I try to use 我尝试使用
df.loc[df.reg_region == df.live_region, 'city_reg'] = df['city_live']
but it returnes 但它返回
ValueError: cannot reindex from a duplicate axis
How can I fix that? 我该如何解决?
Use mask
or numpy.where
which working with duplicated indices very nice: 使用
mask
或numpy.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'])
Or: 要么:
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
Try this: 尝试这个:
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
The reason this works is that the indices are aligned between the left and right hand sides of the assignment when you apply the same mask. 之所以起作用,是因为当您应用相同的蒙版时,索引在分配的左侧和右侧之间对齐。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.