Python 如何在dataframe中将复制分组为列

Python 如何在dataframe中将复制分组为列,python,pandas,numpy,Python,Pandas,Numpy,我有一个复制数据集,我需要这样做 S1 S1 S2 S2 S1.1 S1.2 S2.1 S2.2 Ion1 10 8 14 1 Ion2 0 6 2 3 Rep1 Rep2 Ion1 S1 10 8 Ion1 S2 14 1 Ion2 S1 0 6 Ion2 S2 2 3 前两行是多级标题。s1和S2是样本,s1.1等是该样本的复制测量的文件名。它们不会是这里显示的简单

我有一个复制数据集,我需要这样做

        S1   S1   S2   S2
        S1.1 S1.2 S2.1 S2.2
  Ion1  10   8    14   1
  Ion2  0    6    2    3
        Rep1 Rep2
Ion1 S1 10   8
Ion1 S2 14   1
Ion2 S1 0    6
Ion2 S2 2    3
前两行是多级标题。s1和S2是样本,s1.1等是该样本的复制测量的文件名。它们不会是这里显示的简单名称

我需要去这样的地方

        S1   S1   S2   S2
        S1.1 S1.2 S2.1 S2.2
  Ion1  10   8    14   1
  Ion2  0    6    2    3
        Rep1 Rep2
Ion1 S1 10   8
Ion1 S2 14   1
Ion2 S1 0    6
Ion2 S2 2    3
其中rep1和rep2通常表示第一次和第二次重复测量,样本行被堆叠

最后我想计算复制的平均值。现在,我在一个numpy矩阵中执行此操作,并在输入矩阵中插入一行rep编号,然后将其导入pandas,但这并不美观,我更愿意在数据框中执行此操作

编辑: 我想我有点困惑。当我说名字不简单的时候,它们不是S1.1,它们可能是XF20114,S1.2可能是XF19372 CF,S1可能被称为“florida”,所以名字的最后一个数字不可靠。 现在我只需滚动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

无论复制名称是什么,我是否可以对离子具有相同样本名称的所有值进行分组?

这是一种替代方法:

# 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
df.columns = pd.MultiIndex.from_tuples((first, last.split('.')[-1]) for first, last in df.columns)

df.stack(0).add_prefix('Rep')

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