Получить среднее значение для набора строк с одинаковым строковым значением - PullRequest
1 голос
/ 09 июля 2020

Я хотел бы знать, как я могу получить среднее значение для всех строк, которые соответствуют имени строки между позициями 'Sample_Name' [11:16] , которые P1_SUP, P1_0.2 и многие другие имена в столбце «Sample_Name».

Имейте в виду, что нет необходимости, если последний номер строки отличается.

    D10     D50     D90     Sample_Name
1   4.46    19.81   45.32   TIGR01_P1_SUP_1
2   2.72    14.22   38.41   TIGR01_P1_SUP_1
3   2.3     12.05   27.58   TIGR01_P1_SUP_1
4   6.21    19.81   45.32   TIGR01_P1_SUP_2
5   3.78    16.78   32.55   TIGR01_P1_SUP_2
6   3.2     14.22   32.55   TIGR01_P1_0.2_1
7   2.72    12.05   27.58   TIGR01_P1_0.2_1
8   5.27    19.81   38.41   TIGR01_P1_0.2_2
9   3.78    14.22   32.55   TIGR01_P1_0.2_2
10  6.21    23.37   53.48   TIGR01_P1_0.4_1
.    .        .       .            .
.    .        .       .            .
.    .        .       .            .

expected output:

    Av_D10  Av_D50  Av_D90  Sample_Name
1    3.89   16.53   37.84    P1_SUP
2    3.74   15.07   32.77    P1_0.2
3    6.21   23.37   53.48    P1_0.4
.    .        .       .            .
.    .        .       .            .
.    .        .       .            .

EDIT: после использования @ Код Криса, есть ошибка:

DataError: Нет числовых c типов для агрегирования

Я знаю, что это потому, что я работаю со строками, но не могу получить среднее значение для желаемых данных: D10, D50, D90.

1 Ответ

1 голос
/ 09 июля 2020

Используйте pandas.Series.str с groupby:

new_df = df.groupby(df["Sample_Name"].str[7:13]).mean()
print(new_df)

Или отрицательное индексирование:

new_df = df.groupby(df["Sample_Name"].str[-8:-2]).mean()
print(new_df)

Вывод:

                D10     D50      D90
Sample_Name                         
P1_0.2       3.7425  15.075  32.7725
P1_0.4       6.2100  23.370  53.4800
P1_SUP       3.8940  16.534  37.8360
...