将zip生成的列表列表解压缩到一个列表中

时间:2016-07-06 10:37:50

标签: python pandas dataframe zip multiple-columns

我再次操纵数据帧。 在这里,我使用row作为公共引用来连接多个数据帧。 然后我想通过"配对"重新排序列。每个df的前一列,依此类推。一切都是出于数据可读性的目的

这是我的代码:

df_list=[df_1,df_2,df_3]   
return_df=pd.concat(df_list,axis=1, join='outer')
dfcolumns_list=[df_1.columns,df_2.columns,df_3.columns]
print (return_df.columns)
print(dfcolumns_list)
list_columns=np.array(list(zip(*dfcolumns_list))).reshape(1,-1)[0]
print (list_columns)
list_columns=np.array([x for x in zip(*dfcolumns_list)]).reshape(1,-1)[0]
print (list_columns)
return_df=return_df[list_columns]

我的问题与:

有关
list_columns=np.array(list(zip(*dfcolumns_list))).reshape(1,-1)[0]

或者

list_columns=np.array([x for x in zip(*dfcolumns_list)]).reshape(1,-1)[0]

它获取索引列表,在zip中解压缩,获取每个列索引的第一个元素,将其作为包含在列表中的元组/子列表输出,将其转换为数组,然后重新整形以消除

会导致

的子列表
 return_df=return_df[list_columns]

打破。最后,对索引0 [0]的调用允许它将最终列表检索到np.array(我需要重新整形)。

我的问题是:难道没有那么难看吗?我喜欢zip和类似的函数,但我讨厌没有简单的意思/技巧来解压缩生成的元组/子列表以进行重新排序。

(我也在想到,我可以用不同的方式做df,所以我也会指出这一点,但我的主要问题仍然是如何做得更优雅/更多Pythonic语法。 最后[0]是最脏的......

1 个答案:

答案 0 :(得分:1)

您可以只压缩所有列列表,然后展平列表列表

list_columns = [ col for cols in zip( *dfcolumns_list ) for col in cols ]