note.nkmk.me

pandas.DataFrame, Seriesの行をランダムソート(シャッフル)

Date: 2018-01-13 / tags: Python, pandas

sample()メソッドを活用すると、pandas.DataFrame, pandas.Seriesの行をランダムに並び替える(シャッフルする)ことができる。他にも色々な方法があるが、sample()メソッドを使う方法は他のモジュールをインポートしたりする必要がないので便利。

例として、以下のデータを使用する。

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal.csv')
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

サンプルのcsvファイルはコチラ。

例はpandas.DataFrameだが、pandas.Seriesでも同様のやり方でシャッフルできる。

スポンサーリンク

sample()メソッドに引数frac=1を指定

sample()メソッドについての詳細は以下の記事参照。

引数frac=1とすると、すべての行数分のランダムサンプリングをすることになり、全体をランダムに並び替える(シャッフルする)ことに等しい。

df_s = df.sample(frac=1)
print(df_s)
#       name  age state  point
# 2  Charlie   18    CA     70
# 5    Frank   30    NY     57
# 4    Ellen   24    CA     88
# 1      Bob   42    CA     92
# 0    Alice   24    NY     64
# 3     Dave   68    TX     70

引数random_stateを指定すると乱数シードを固定できる。常に同じように並び替えられる。

df_s = df.sample(frac=1, random_state=0)
print(df_s)
#       name  age state  point
# 5    Frank   30    NY     57
# 2  Charlie   18    CA     70
# 1      Bob   42    CA     92
# 3     Dave   68    TX     70
# 0    Alice   24    NY     64
# 4    Ellen   24    CA     88

reset_index()メソッドでインデックス(行番号)を振り直す

reset_index()メソッドについての詳細は以下の記事参照。

reset_index()メソッドを使うと、シャッフルしたオブジェクトのインデックス(行番号)を振り直すことができる。元のインデックスを削除するために引数drop=Trueとする。

df_s = df.sample(frac=1).reset_index(drop=True)
print(df_s)
#       name  age state  point
# 0    Ellen   24    CA     88
# 1  Charlie   18    CA     70
# 2    Alice   24    NY     64
# 3     Dave   68    TX     70
# 4    Frank   30    NY     57
# 5      Bob   42    CA     92

元のオブジェクトを更新

この方法では元のオブジェクト自体を変更することはできないので、元のオブジェクトを更新したい場合は元のオブジェクトに代入して上書きする。

df = df.sample(frac=1).reset_index(drop=True)
print(df)
#       name  age state  point
# 0     Dave   68    TX     70
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3    Alice   24    NY     64
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事