【发布时间】:2016-07-22 05:59:35
【问题描述】:
如何按行随机合并、连接或连接 pandas 数据帧?假设我有四个类似这样的数据框(有更多行):
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"]})
我怎样才能加入这四个数据框随机输出这样的东西(它们是随机合并的行):
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 上方的语句仅适用于第一行,之后的每一行(我有更多)都是一样的,即它只会洗牌一次:
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
【问题讨论】:
-
所以你不在乎列的一致性?
-
@MaxU 不,真的不在乎列的名称,可能是 1,2,3,...,n 或其他东西
-
我在询问一列中的值...在您想要的 DF 中,第一个
col1混合了来自不同列的值 - 这就是您想要的吗? -
是的,确切地说,重要的是所有 1_i 排成一排,所有 2_i 排成一排,依此类推,但以随机顺序排列。因此,这将混合您所说的值,这是预期的,感谢您清除它。