我的问题类似于this,但我不确定如何修改列表中元素的最后一部分.

我想根据列名的起始方式将一个数据帧拆分为更小的数据帧.

例如,列名的格式为:

df = pd.DataFrame(np.random.randint(0,100,size=(10, 4)))
df.columns = ['P1_ATGC', 'P1_GCTA', 'P2_AACT', 'P2_CGAT']
df
   P1_ATGC  P1_GCTA  P2_AACT  P2_CGAT
0       78       86       47       78
1       22       48       22       43
2       91       12       45       10
3       83       85        9       20
4       82       26       25       71
5       13       36       53       19
6       93       15       30       28
7       24       13       55       23
8       10       49       98       45
9       85       35       77       89

并希望最终 for each PX提供单独的df.例如:

df[0]
   P1_ATGC  P1_GCTA
0       78       86
1       22       48
2       91       12
3       83       85
4       82       26
5       13       36
6       93       15
7       24       13
8       10       49
9       85       35

df[1]
   P2_AACT  P2_CGAT
0       47       78
1       22       43
2       45       10
3        9       20
4       25       71
5       53       19
6       30       28
7       55       23
8       98       45
9       77       89

我可以得到唯一的PXs:np.unique([x.split('_')[0] for x in df.columns])

array(['P1', 'P2'], dtype='<U2')

但是,如何根据数据帧所属的PX按列拆分数据帧呢?

推荐答案

单向使用pandas.DataFrame.groupby:

res = []
for k, d in df.groupby(df.columns.str.split("_").str[0], axis=1):
    res.append(d)
    print(d)

输出:

   P1_ATGC  P1_GCTA
0       78       86
1       22       48
2       91       12
3       83       85
4       82       26
5       13       36
6       93       15
7       24       13
8       10       49
9       85       35
   P2_AACT  P2_CGAT
0       47       78
1       22       43
2       45       10
3        9       20
4       25       71
5       53       19
6       30       28
7       55       23
8       98       45
9       77       89

Python相关问答推荐

如何将uint 16表示为float 16

Numpy索引argsorted使用integer数组,同时保留排序顺序

如何使用Selenium访问svg对象内部的元素

实现的差异取决于计算出的表达是直接返回还是首先存储在变量中然后返回

Python中的负前瞻性regex遇到麻烦

Pandas :多索引组

Odoo 14 hr. emergency.public内的二进制字段

使用新的类型语法正确注释ParamSecdecorator (3.12)

Python虚拟环境的轻量级使用

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

从嵌套的yaml创建一个嵌套字符串,后面跟着点

解决调用嵌入式函数的XSLT中表达式的语法移位/归约冲突

可以bcrypts AES—256 GCM加密损坏ZIP文件吗?

Geopandas未返回正确的缓冲区(单位:米)

如何在两列上groupBy,并使用pyspark计算每个分组列的平均总价值

干燥化与列姆化的比较

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

通过追加列表以极向聚合