2017-06-26 11 views
1

複数のデータフレームをまとめてシャッフルすることはできますか?複数のデータフレームをまとめてシャッフル

例えば、私はDataFrame df1とDataFrame df2を持っています。ランダムに行をシャッフルしたいのですが、どちらのDataFramesでも同じ方法で行います。

df1

|___|_______| 
| 1 | ... | 
| 2 | ... | 
| 3 | ... | 
| 4 | ... | 

df2

|___|_______| 
| 1 | ... | 
| 2 | ... | 
| 3 | ... | 
| 4 | ... | 

両方のデータフレームのための可能な順序をシャッフルした後はがあり得る:

|___|_______| 
| 2 | ... | 
| 3 | ... | 
| 4 | ... | 
| 1 | ... | 
+0

私は両方のデータフレームに共通の列が少なくとも1つあると仮定していますか? –

+0

@AnirudhSridhar:インデックスだけですが、行数は同じです。 – ScientiaEtVeritas

+0

@ jezraelの答えが正しいと思います。私のアプローチは、2つのデータフレームをマージし、シャッフルしてから分割する方法でした。これにより、両方のデータフレームが同じようにシャッフルされます。 –

答えて

3

私はあなたがindexnumpy.random.permutationを適用するとreindexを倍増することができると思うが、両方DataFrameは同じ長さと同じ一意のインデックス値を持っている必要がある。reindex_axis

df1 = pd.DataFrame({'a':range(5)}) 
print (df1) 
    a 
0 0 
1 1 
2 2 
3 3 
4 4 

df2 = pd.DataFrame({'a':range(5)}) 
print (df2) 
    a 
0 0 
1 1 
2 2 
3 3 
4 4 

idx = np.random.permutation(df1.index) 
print (df1.reindex(idx)) 
    a 
2 2 
4 4 
1 1 
3 3 
0 0 

print (df2.reindex(idx)) 
    a 
2 2 
4 4 
1 1 
3 3 
0 0 

オルタナティブ:

print (df1.reindex_axis(idx, axis=0)) 
print (df2.reindex_axis(idx, axis=0)) 
関連する問題