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)]