1
1

More than 1 year has passed since last update.

pandasの複数個重複した行を抽出

Last updated at Posted at 2022-10-19

pandasである値の個数が指定した個数の行のみを抽出する方法

(*今回は、自身の競馬データの加工においてメモ用に記載致しますので、分かりにくい点があると思いますがご容赦ください。)

方法は、value_counts()を使って各値の個数を出力してから、指定した個数ある行の値を出力し、その出力した値を含む行を出力すれば良いです。

具体的には、以下のコードを参考にしてください

データを生成

test_list = ["a", "b", "a", "a", "b", "c", "a"]
test_column = ["column1"]
test_df = pd.DataFrame(test_list, columns=test_column)
print(test_df)

'''
    column
0      a
1      b
2      a
3      a
4      b
5      c
6      a
'''

今回は、4個値が重複している行を探します。
# 各値が4個あるかをboolで返す(pandas.series)
count_4value_series = (test_df["column1"].value_counts()==4)
# 値の個数が4個ある値を返す
count_4value_value = count_4value_series.loc[count_4value_series == True].index
print(count_4value_value)

'''
Index(['a'], dtype='object')
'''

値が4個あるデータを返す
print(test_df[test_df["column1"].isin(count_4value_value)])

'''
  column1
0       a
2       a
3       a
6       a
'''

実装したかったこと

競馬データは、各レース毎で馬数が異なります。そのため、NNで学習をする際にインプット数が異なるため、全データを使えば学習ができません。 そのため、馬数が同じレースを使って学習をする際に、馬数に同じレースのみを抽出する方法を考えて実装いたしました。
# 馬数が16頭
race_indexes = (data["race_index"].value_counts() == 16)
race_16horse_indexes = race_indexes.loc[race_indexes == True].index
data[data["index"].isin(race_16horse_indexes)]
1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1