【问题标题】:Get the average for set of rows that has the same string value获取具有相同字符串值的一组行的平均值
【发布时间】:2020-07-09 04:44:52
【问题描述】:

我想知道如何获得与 '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
.    .        .       .            .
.    .        .       .            .
.    .        .       .            .

编辑: 使用@Chris代码后,出现错误:

DataError:没有要聚合的数字类型

我知道这是因为我正在处理字符串,但无法获得所需数据的平均值:D10、D50、D90。

【问题讨论】:

    标签: python pandas numpy data-science


    【解决方案1】:

    pandas.Series.strgroupby 一起使用:

    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
    

    【讨论】:

    • 我可以使用负索引吗?我注意到名称并不总是与前缀值匹配(这就是我为 string[11:16] 放置错误索引的原因)。但是对于负索引,它将始终为 [-3:-8]。
    • @MabyEsperanza 你应该可以。字符串基本上类似于字符列表。
    • @MabyEsperanza 我也添加了负索引代码(实际上是相同的)
    • @Chris 我应该写另一行吗?因为弹出一个错误说:DataError: No numeric types to aggregate
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多