Pythonで1〜100の乱数30個からデータフレームを作成し、各行の「最大値÷最小値」を計算する方法
この記事では、Pythonを使って1から100までの範囲でランダムに生成した30個の要素からなる配列を作成し、それをデータフレームに変換した上で、各行における「最大値 ÷ 最小値」の比率を計算する方法を解説します。
まず、実行結果の例を見てみましょう。各行の最大値を最小値で割った結果は以下のようになります。
0 43.000000 1 1.911111 2 2.405405 3 20.000000 4 7.727273 5 6.333333
解決手順
この問題を解くためには、以下の手順に従います。
まず、NumPyの
np.random.randint(1, 100, 30)を使って、1以上100未満の整数からなる30個の乱数を生成します。次に、reshape(6, 5)で配列の形状を変更し、6行5列の2次元配列に変換します。これをPandasのDataFrameに渡してデータフレームを作成します。
df = pd.DataFrame(np.random.randint(1,100,30).reshape(6,5))
続いて、
df.apply()関数の中でラムダ式(lambda)を使用し、各行(axis=1)ごとにnp.max(x) / np.min(x)、つまり行内の最大値を最小値で割った値を計算します。その結果をmax_of_minという変数に保存します。
max_of_min = df.apply(lambda x: np.max(x)/np.min(x), axis=1)
最後に、計算結果である
max_of_minを出力して確認します。
サンプルコード
理解を深めるために、以下のコード全体を確認してみましょう。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(1,100,30).reshape(6,5))
print("Dataframe is:\n",df)
max_of_min = df.apply(lambda x: np.max(x)/np.min(x), axis=1)
print("maximum by minimum of each row:\n",max_of_min)出力結果
Dataframe is: 0 1 2 3 4 0 2 13 4 15 86 1 60 53 86 75 45 2 37 85 40 89 88 3 67 33 80 4 74 4 85 71 11 67 81 5 56 85 95 15 94 maximum by minimum of each row: 0 43.000000 1 1.911111 2 2.405405 3 20.000000 4 7.727273 5 6.333333 dtype: float64
なお、乱数は実行するたびに異なる値が生成されるため、出力されるデータフレームや計算結果も毎回変わります。この手法は、データのばらつき具合を行単位で把握したい場合などに役立ちます。apply()とラムダ式を組み合わせることで、行方向・列方向の柔軟な集計処理を簡潔に記述できるのがポイントです。
-
Pythonで2つのリストの要素間の最小差を求めるプログラム
2つのリスト間の最小差とは2つのリスト L1 と L2 が与えられたとき、L1 のある要素と L2 のある要素を組み合わせたときに生じる「差」の中で、最も小さいもの(絶対値が最小となる差)を求める問題です。例えば、入力が L1 = [2, 7, 4]、L2 = [16, 10, 11] の場合、出力は 3 になります。これは、10 − 7 = 3 という差が最も小さいためです。解法のアプローチ:ソート+双方向ポインタこの問題は、両方のリストをソートしてから、2つのポインタを使って効率的に比較していくことで解けます。手順は以下の通りです。リスト L1 をソートし、リスト L2 もソートするans
-
Pythonでリスト内の最大値・最小値の位置を見つける方法
Pythonでは、リスト内の最大値や最小値を求めるのが非常に簡単で、それらの位置(インデックス)も簡単に取得できます。Pythonには便利な組み込み関数が用意されており、min()はリスト内の最小値を求め、max()はリスト内の最大値を求めます。さらに、index()を使えば特定の要素のインデックス(位置)を調べることができます。 アルゴリズム maxminposition(A, n) /* Aはユーザーが入力したリスト、nはリストのサイズ */ ステップ1:組み込み関数を使って最小要素の位置を求める A.index(min(A)) ステップ2:組み込み関数を使って最