我再次操纵数据帧。 在这里,我使用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]
是最脏的......
答案 0 :(得分:1)
您可以只压缩所有列列表,然后展平列表列表
list_columns = [ col for cols in zip( *dfcolumns_list ) for col in cols ]