Как сгруппировать реплики в виде столбцов в Pandas фрейме данных - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть набор данных с репликами, и мне нужно go из чего-то подобного

        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 et c - имена файлов для повторных измерений этого образца. Они не будут простыми именами, как показано здесь

Мне нужно go к чему-то вроде этого

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

В котором rep1 и rep2 обозначают первое и второе повторения измерений в целом и строка сэмплов составлена.

В конце концов я хочу вычислить среднее значение для повторов. Прямо сейчас я делаю эту операцию в матрице numpy и вставляю строку во входную матрицу с номерами повторений и импортирую ее в 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

Могу ли я сгруппировать все значения, которые имеют одинаковое имя образца для иона, независимо от того, какое имя репликации есть

Ответы [ 2 ]

1 голос
/ 29 апреля 2020
# 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
0 голосов
/ 29 апреля 2020

Это альтернатива:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...