如何按行随机合并、连接或连接pandas Dataframe ?假设我有四个类似这样的 Dataframe (有更多的行):
df1 = pd.DataFrame({'col1':["1_1", "1_1"], 'col2':["1_2", "1_2"], 'col3':["1_3", "1_3"]})
df2 = pd.DataFrame({'col1':["2_1", "2_1"], 'col2':["2_2", "2_2"], 'col3':["2_3", "2_3"]})
df3 = pd.DataFrame({'col1':["3_1", "3_1"], 'col2':["3_2", "3_2"], 'col3':["3_3", "3_3"]})
df4 = pd.DataFrame({'col1':["4_1", "4_1"], 'col2':["4_2", "4_2"], 'col3':["4_3", "4_3"]})
字符串
我如何将这四个 Dataframe 随机地连接起来输出这样的东西(它们是随机地逐行合并的):
col1 col2 col3 col1 col2 col3 col1 col2 col3 col1 col2 col3
0 1_1 1_2 1_3 4_1 4_2 4_3 2_1 2_2 2_3 3_1 3_2 3_3
1 2_1 2_2 2_3 1_1 1_2 1_3 3_1 3_2 3_3 4_1 4_2 4_3
型
我在想我可以这样做:
my_list = [df1,df2,df3,df4]
my_list = random.sample(my_list, len(my_list))
df = pd.DataFrame({'empty' : []})
for row in df:
new_df = pd.concat(my_list, axis=1)
print new_df
型
上面的for
语句将不能工作超过第一行,后面的每一行(我有更多)将只是相同,即它只会 Shuffle 一次:
col1 col2 col3 col1 col2 col3 col1 col2 col3 col1 col2 col3
0 4_1 4_2 4_3 1_1 1_2 1_3 2_1 2_2 2_3 3_1 3_2 3_3
1 4_1 4_2 4_3 1_1 1_2 1_3 2_1 2_2 2_3 3_1 3_2 3_3
型
3条答案
按热度按时间qv7cva1a1#
也许是这样的?
字符串
或者,如果只有df应该被 Shuffle ,你可以这样做:
型
3hvapo4f2#
**更新:**来自@Divakar的更好的解决方案:
字符串
输出量:
型
说明:(c)Divakar
NumPy解决方案
让我们有一个基于NumPy的矢量化解决方案,希望是一个快速的解决方案!
1)让我们将一个串联值的数组重新塑造成一个
3D
数组,将每行“切割”成ncols
组,对应于每个输入 Dataframe 中的列数。型
2)接下来,我们欺骗
np.aragsort
来给予我们随机唯一索引,范围从0到N-1
,其中N是输入 Dataframe 的数量。型
3)最后一个技巧是NumPy的花哨的索引和一些广播来索引到
A
和sidx
给予我们输出数组-型
4)如果需要,转换为 Dataframe -
型
旧答案:
IIUC你可以这样做:
型
产出
型
说明:
型
gzjq41n43#
我认为这个答案更容易,它适用于每一个df维度
字符串
样本给你一个随机样本的DF。如果你要求完整的DF。它会随机化列