Simple/Beginner Excel 转型 Pandas

Simple/Beginner Excel Transformation in Pandas

我有一个 excel 格式的文档(列是数据集,行是细胞类型,值是逗号分隔的基因名称)

我想像这样重新格式化 sheet(列仍然是数据集,但行现在是基因名称,值是细胞类型):

我试图在 pandas 中做到这一点。我将输入作为数据帧导入并命名为 'test'。我的逻辑是遍历每一列,并在每一行中循环,获取逗号分隔的值,拆分这些值,然后使每个值成为一个新索引。

这种方法显然效率很低,但我什至无法让它按预期工作(即使我没有收到错误,只是没有输出,编辑注意: 'blank' 是一本新的空白 Excel 书的名称)

无效尝试:

for dataSet in test.columns:
    for index, rows in test.iterrows():
        geneList = test[dataSet].loc[index].split(",")
        for gene in geneList:
            blank[dataSet].reindex([gene])

所以两个问题: 1. 我怎样才能让这个例子工作? 2.如何更高效地完成这个转换?

谢谢!

gene中有重复项,所以需要:

您需要通过 stack 创建 Series, 然后可以使用 split and reshape by stack. For columns from MultiIndex call reset_index.

上次使用 groupby for lists and last reshape by unstack:

df = df.stack().str.split(',', expand=True).stack().reset_index(name='a')
df = df.groupby(['a', 'level_1'])['level_0'].apply(','.join).unstack()
print (df)
level_1          dataset 1          dataset 2          dataset 3
a                                                               
gene1    cell1,cell2,cell3  cell1,cell2,cell3  cell1,cell2,cell3
gene2    cell1,cell2,cell3  cell1,cell2,cell3  cell1,cell2,cell3
gene3    cell1,cell2,cell3               None               None
gene4                 None  cell1,cell2,cell3               None
gene5                 None               None  cell1,cell2,cell3