python - 如果数据框以列表中的字符串开头,则按列名称拆分数据框

标签 python pandas

我的问题类似于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

并希望最终为每个 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

我能够通过以下方式获取唯一的 PX: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 - 如果数据框以列表中的字符串开头,则按列名称拆分数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72625111/

相关文章:

python - 从路径导入 Pandas

python - 根据同一行和后一行的另一列中的值创建数据框列

python - 如何从 Python 获取失败服务的 systemctl 结果?

python - 如何为其他列与 Pandas 交互的特定列设置默认值?

Python:如何使用列表检查 csv 列中是否没有值

python - Pandas datetools 模块错误

python - 如果一行中的一个单元格为空,则更改数据帧中的特定值

python - Python 字符串是否以终止 NULL 结尾?

python - PyCharm 无法连接到 GhostDriver

python - 如何使用 xlsxwriter 自定义 Excel 工作表中按钮的操作