根据 pandas 中的条件交换列值

2024-05-10

我想按条件重新定位列。 如果国家/地区是“日本”,我需要将姓氏和名字反向重新定位。

df = pd.DataFrame([['France','Kylian', 'Mbappe'],
               ['Japan','Hiroyuki', 'Tajima'],
               ['Japan','Shiji', 'Kagawa'],
               ['England','Harry', 'Kane'],
               ['Japan','Yuya', 'Ohsako'],
               ['Portuguese','Cristiano', 'Ronaldo']],
              columns=['country', 'first_name', 'last_name'])

电流输出为

      country first_name last_name
0      France     Kylian    Mbappe
1       Japan   Hiroyuki    Tajima
2       Japan      Shiji    kagawa
3     England      Harry      Kane
4       Japan       Yuya    Ohsako
5  Portuguese  Cristiano   Ronaldo

我想让它跟随。

      country first_name last_name
0      France     Kylian    Mbappe
1       Japan     Tajima  Hiroyuki
2       Japan     Kagawa    Shinji
3     England      Harry      Kane
4       Japan     Ohsako      Yuya
5  Portuguese  Cristiano   Ronaldo

任何想法?


Use loc并交换“country”与“Japan”匹配的行的“first_name”和“last_name”值。

m = df['country'] == 'Japan'

df.loc[m, ['first_name', 'last_name']] = (
    df.loc[m, ['last_name', 'first_name']].values)
df    

      country first_name last_name
0  France      Kylian     Mbappe  
1  Japan       Tajima     Hiroyuki
2  Japan       Kagawa     Shiji   
3  England     Harry      Kane    
4  Japan       Ohsako     Yuya    
5  Portuguese  Cristiano  Ronaldo 

另一种选择使用rename and update:

mp = {'first_name': 'last_name', 'last_name': 'first_name'}
df.update(df.loc[m].rename(mp, axis=1))
df

      country first_name last_name
0  France      Kylian     Mbappe  
1  Japan       Tajima     Hiroyuki
2  Japan       Kagawa     Shiji   
3  England     Harry      Kane    
4  Japan       Ohsako     Yuya    
5  Portuguese  Cristiano  Ronaldo 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据 pandas 中的条件交换列值 的相关文章

随机推荐