In the following dataframe, in each row, I want name1
value to be smaller values among name1
and name2
.
data = {'name1': ['Jason', 'Molly', 'Tina', 'yuma', 'Amy'],
'name2': ['Cochice', 'Pima', 'Santa', 'Maria', 'Yuma'],
'val': [12, 22, 4, 9, 7],
'db' : ['xx','yy', 'zz', 'mm', 'aa']}
df = DataFrame(data)
df
db name1 name2 val
xx Jason Cochice 12
yy Molly Pima 22
zz Tina Santa 4
mm yuma Maria 9
aa Amy Yuma 7
As far as I know sorting can be done by rows only. How to arrange values in this manner?
The expected output is:
db name1 name2 val
xx Cochice Jason 12
yy Molly Pima 22
zz Santa Tina 4
mm Amy Maricopa 9
aa Amy Yuma 7
You can use apply
with sorted
, but first set_index
and last reset_index
:
print (df.set_index('val').apply(sorted, axis=1).reset_index())
val name1 name2
0 2 Cochice Jason
1 2 Molly Pima
2 3 Santa Tina
3 3 Amy Maria
4 3 Amy Yuma
Similar solution with np.sort
:
print (df.set_index('val').apply(np.sort, axis=1).reset_index())
val name1 name2
0 2 Cochice Jason
1 2 Molly Pima
2 3 Santa Tina
3 3 Amy Maria
4 3 Amy Yuma
If multiple columns use subset
:
df[['name1','name2']] = df[['name1','name2']].apply(np.sort, axis=1)
print (df)
db name1 name2 val
0 xx Cochice Jason 2
1 yy Molly Pima 2
2 zz Santa Tina 3
3 mm Amy Maria 3
4 aa Amy Yuma 3
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.