首页 > 解决方案 > 根据原始数据框列数创建多个数据框

问题描述

我已经搜索了很长时间,但我没有找到任何类似的问题。如果有,请告诉我!

我目前正在尝试将一个数据帧划分为 n 个数据帧,其中 n 等于原始数据帧的列数。所有新生成的数据框必须始终保留原始数据框的第一列。例如,额外的内容将被收集到一个列表中,以供进一步访问。

为了形象化我的意图,这里有一个简短的例子:

 >> original df

 GeneID   A      B      C      D      E
   1     0.3    0.2    0.6    0.4    0.8
   2     0.5    0.3    0.1    0.2    0.6
   3     0.4    0.1    0.5    0.1    0.3
   4     0.9    0.7    0.1    0.6    0.7
   5     0.1    0.4    0.7    0.2    0.5

我想要的输出是这样的:

 >> df1

 GeneID   A
   1     0.3 
   2     0.5
   3     0.4
   4     0.9
   5     0.1

 >> df2

 GeneID   B
    1    0.2
    2    0.3
    3    0.1
    4    0.7
    5    0.4


 ....

依此类推,直到原始数据框中的所有列都被覆盖。什么是更好的解决方案?

标签: pythonpandasdataframe

解决方案


您可以使用df.columns获取所有列名,然后创建子数据框:

outdflist =[]
# for each column beyond first: 
for col in oridf.columns[1:]:
    # create a subdf with desired columns:
    subdf = oridf[['GeneID',col]]
    # append subdf to list of df: 
    outdflist.append(subdf)

# to view all dataframes created: 
for df in outdflist:
    print(df)

输出:

   GeneID    A
0       1  0.3
1       2  0.5
2       3  0.4
3       4  0.9
4       5  0.1
   GeneID    B
0       1  0.2
1       2  0.3
2       3  0.1
3       4  0.7
4       5  0.4
   GeneID    C
0       1  0.6
1       2  0.1
2       3  0.5
3       4  0.1
4       5  0.7
   GeneID    D
0       1  0.4
1       2  0.2
2       3  0.1
3       4  0.6
4       5  0.2
   GeneID    E
0       1  0.8
1       2  0.6
2       3  0.3
3       4  0.7
4       5  0.5

上面for的循环也可以更简单地写成列表推导:

outdflist = [ oridf[['GeneID', col]] 
              for col in oridf.columns[1:] ]

推荐阅读