taj*_*iro 5 python dataframe pandas
我想按条件重新定位列。如果国家是“日本”,我需要重新定位 last_name 和 first_name 。
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'])
Run Code Online (Sandbox Code Playgroud)
当前输出为
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
Run Code Online (Sandbox Code Playgroud)
我想让它跟随。
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
Run Code Online (Sandbox Code Playgroud)
任何的想法?
### check below
df['first_name'],df['last_name']=np.where(df['country']=='Japan',(df['last_name'],df['first_name']),(df['first_name'],df['last_name']))
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
loc对于“国家”与“日本”匹配的行,使用并交换“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
Run Code Online (Sandbox Code Playgroud)
使用rename和的另一种选择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
Run Code Online (Sandbox Code Playgroud)