daikiclimate
@daikiclimate (It dk)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Pandas】データの取り出し(2番目に大きい or 横軸のソート)について【Python】

Q&A

Closed

こんにちは。

df = pd.DataFrame([[10,8,9,5],[4, 9, 12, 8], [15, 6, 8, 2]  ],columns = ["A1", "A2", "A3", "A4"] )

pandasで以下のような感じで

A1 A2 A3 A4
10 8 9 5
4 9 12 8
15 6 8 2

このように表がある場合に

A1 A2 A3 A4
10 9 8 5
12 9 8 4
15 8 6 2

このように大きい順で並び替えるか

あるいは、
以下のコードのように

#1番大きい
df["f_max"] = df[["A1", "A2", "A3", "A4"]].max()(axis = 1)

#2番目に大きい
df["f_second_max"] = 

#2番目に小さい
df["f_second_min"] = 

#1番小さい
df["f_min"] = f_min = df[["A1", "A2", "A3", "A4"]].min()(axis = 1)

横軸で、1番大きい、2番目に大きい、3番目に大きい、4番目に大きい
と取り出したく、2番目に大きい、3番目に大きいができていません。

どちらかができれば、結果的には同じことができると考えています。
numpyにしてfor文を回すのはしたくありません。
pandasのメソッドで良い方法があれば、よろしくお願いします。

0

1Answer

np.sort()を用いて、

In [11]: df
Out[11]:
   A1  A2  A3  A4
0  10   8   9   5
1   4   9  12   8
2  15   6   8   2

In [12]: np.sort(df)
Out[12]:
array([[ 5,  8,  9, 10],
       [ 4,  8,  9, 12],
       [ 2,  6,  8, 15]], dtype=int64)

In [13]: df.apply(np.sort, axis=1, raw=True)
Out[13]:
   A1  A2  A3  A4
0   5   8   9  10
1   4   8   9  12
2   2   6   8  15
In [14]: pd.DataFrame(np.sort(df)[:, ::-1], columns=df.columns)
Out[14]:
   A1  A2  A3  A4
0  10   9   8   5
1  12   9   8   4
2  15   8   6   2

In [15]: df.apply(lambda x: np.sort(x)[::-1], axis=1, raw=True)
Out[15]:
   A1  A2  A3  A4
0  10   9   8   5
1  12   9   8   4
2  15   8   6   2

でいかがでしょうか。

1Like

Comments

  1. @daikiclimate

    Questioner

    ありがとうございます!助かります!

Your answer might help someone💌