Python-pandasの階層型インデックスにおいて、親子関係を保ったまま親をシャッフルすることはできるのでしょうか。
- 環境
Mac
Python 3.7.3
Jupyter Notebook 5.7.8
- やりたいこと
親ID列・子ID列を持ったデータフレームがあります。
このとき、全行を単純にランダムソートするのではなく、同じ親IDを持つ行をグループ化した上で、そのグループをランダムソートできるでしょうか。
- やったこと
一部の抽出対象のparent-idが格納された配列を用意。
isinメソッドでマッチしたデータを出力しようとしましたが、parent-idをひとかたまりにランダム出力されるのではなく、単純なランダムソートで出力されてしまいます。
Python Code
lis = [2, 3, 1] #parent-idが1~3までのものが出力対象
test_df = pd.DataFrame({"parent-id": [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4],
"child-id": [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]})
f = lambda x: x[(x["parent-id"].isin(lis))]
test_df.groupby(["parent-id"]).apply(f).sample(frac=1, random_state=0)