Python 转置列表中的多个数据帧

Python transposing multiple dataframes in a list

我有一些数据框与下面列出的 2 个数据框相似(在行数和列数方面)

0    email           factor1_final   factor2_final   factor3_final
1    john@abc.com    85%             90%             50%
2    peter@abc.com   80%             60%             60%
3    shelby@abc.com  50%             70%             60%
4    jess@abc.com    60%             65%             50% 
5    mark@abc.com    98%             50%             60%
0    email           item1           item2           
1    john@abc.com    80%             60%             
2    peter@abc.com   60%             90%             
3    shelby@abc.com  900%            40%             
4    jess@abc.com    70%             35%            
5    mark@abc.com    92%             50%

我想要的输出是有多个数据框,其中电子邮件作为列 header,因素或项目作为行


email     john@abc.com   peter@abc.com   shelby@abc.com   jess@abc.com   mark@abc.com
factor1     85%          80%             50%              60%            98%
factor2     90%          60%             70%              65%            50% 
factor3     50%          60%             60%              50%            60%

我可以通过使用它单独转置每个数据帧来获得结果,但我想创建一个 for 循环,因为我有几个数据帧要转置

#Set index to email and transpose
df1 = df1.set_index('email').T
df1

写了类似这样的东西,但数据帧没有转置。想直接更改数据帧列表中的数据帧(沿着 inplace=True 的某处)。想知道我是否遗漏了什么,感谢任何形式的帮助,谢谢。

#Create a list of all the dataframes
df_list = [df1, df2, df3, df4, df5, df6]

for df in df_list:
    df = df.set_index('email').T

df1

#tried this too but does not work 
for i, df in enumerate(df_list):
    df_list[i] = df_list[i].set_index('email').T

对我来说第二个解决方案有效,这里有一个小的替代方案:

df_list = [df1, df2]

for i, df in enumerate(df_list):
    df_list[i] = df.set_index('email').T

print (df_list[0])
email         john@abc.com peter@abc.com shelby@abc.com jess@abc.com  \
factor1_final          85%           80%            50%          60%   
factor2_final          90%           60%            70%          65%   
factor3_final          50%           60%            60%          50%   

email         mark@abc.com  
factor1_final          98%  
factor2_final          50%  
factor3_final          60%  

print (df_list[1])
email john@abc.com peter@abc.com shelby@abc.com jess@abc.com mark@abc.com
item1          80%           60%           900%          70%          92%
item2          60%           90%            40%          35%          50%

创建新数据帧列表的解决方案:

dfs = [df.set_index('email').T for df in df_list]