2016-12-04 5 views
2

次のデータフレームでは、各行で、name1の値をname1name2のうち小さい値にします。パンダの列の値を指定する

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 

私が知る限り、並べ替えは行のみで行うことができます。この方法で値を整理する方法は?

予想される出力は次のようになります。

db name1 name2 val 
xx Cochice Jason 12 
yy Molly Pima 22 
zz Santa Tina 4 
mm Amy  Maricopa 9 
aa Amy  Yuma 7 

答えて

2

あなたはsortedapplyを使用していますが、最初set_indexと最後reset_indexことができます。np.sort

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 

同様のソリューション:

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 

の場合複数列欄を使用して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 
+0

私は非常に明確ではなかったと思う。他の列もあります。私は 'name1'と' name2'だけにこの操作が必要です。他の全ての列は変更しません。 Chaged the OP – learner

+0

申し訳ありません、私は答えを編集します。 – jezrael

関連する問題