Python 将几个数据帧混洗在一起

Python 将几个数据帧混洗在一起,python,pandas,dataframe,Python,Pandas,Dataframe,可以将几个数据帧混洗在一起吗 例如,我有一个数据帧df1和一个数据帧df2。我想随机地洗牌这些行,但对两个数据帧的洗牌方式相同 示例 df1: |___|_______| | 1 | ... | | 2 | ... | | 3 | ... | | 4 | ... | df2: |___|_______| | 1 | ... | | 2 | ... | | 3 | ... | | 4 | ... | 洗牌后,两个数据帧的可能顺序可能是: |___|_______

可以将几个数据帧混洗在一起吗

例如,我有一个数据帧
df1
和一个数据帧
df2
。我想随机地洗牌这些行,但对两个数据帧的洗牌方式相同

示例

df1

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

|___|_______|
| 1 |  ...  |
| 2 |  ...  |
| 3 |  ...  |
| 4 |  ...  |
洗牌后,两个数据帧的可能顺序可能是:

|___|_______|
| 2 |  ...  |
| 3 |  ...  |
| 4 |  ...  |
| 1 |  ...  |
我认为您可以通过应用于
索引
来加倍,但两个
数据帧
都必须具有相同的长度和相同的唯一索引值:

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
备选方案包括:


我假设两个数据帧中至少有一个公共列?@AnirudhSridhar:只有索引,但行数相同。我认为@jezrael的答案是正确的。我的方法将涉及合并两个数据帧,洗牌,然后拆分它们。这将确保两个数据帧的洗牌方式相同。
.reindex\u axis
将在将来的版本中删除,而应使用
.reindex
print (df1.reindex_axis(idx, axis=0))
print (df2.reindex_axis(idx, axis=0))