首页 > 解决方案 > 如何将复制分组为 Pandas 数据框中的列

问题描述

我有一个带有重复的数据集,我需要从这样的东西开始

        S1   S1   S2   S2
        S1.1 S1.2 S2.1 S2.2
  Ion1  10   8    14   1
  Ion2  0    6    2    3

前两行是多级标题。s1 和 S2 是样本,s1.1 等是该样本的重复测量的文件名。它们不会是这里显示的简单名称

我需要去这样的事情

        Rep1 Rep2
Ion1 S1 10   8
Ion1 S2 14   1
Ion2 S1 0    6
Ion2 S2 2    3

其中 rep1 和 rep2 通常表示第一次和第二次重复测量,并且样品行是堆叠的。

最终我想计算重复的平均值。现在我正在一个 numpy 矩阵中执行此操作,并在输入矩阵中插入一行带有代表数字的行并将其导入熊猫,但这是不优雅的,我宁愿在数据框中执行此操作

编辑:我想我有点困惑。当我说名称不简单时,它们不会是 S1.1,它们可能是 XF20114,而 S1.2 可能是 XF19372 CF,而 S1 可能被称为“佛罗里达”,所以名称的最后一个数字不能是依靠。现在,我只需滚动浏览 numpy 矩阵中的示例行,如果示例编号与之前的相同,则将增加的数字放入新行中。如果示例名称更改,我将数字设置为 1。这使得示例中的表格如下所示:

        S1   S1   S2   S2
        S1.1 S1.2 S2.1 S2.2
        1    2    1    2
  Ion1  10   8    14   1
  Ion2  0    6    2    3

无论重复名称是什么,我是否可以将具有相同样品名称的所有值分组为一个离子?

标签: pythonpandasnumpy

解决方案


# stack the first level
df_s = df.stack(level=0)
# groupby the last string in the cols and sum
df_s.groupby(df_s.columns.str[3:], axis=1).sum()

            1    2
0                 
Ion1 S1  10.0  8.0
     S2  14.0  1.0
Ion2 S1   0.0  6.0
     S2   2.0  3.0

推荐阅读