【问题标题】:Calculating means for multiple columns, in different rows in pandas计算熊猫不同行中多列的平均值
【发布时间】:2018-04-11 04:17:19
【问题描述】:

我有一个这样的 csv 文件:

-Species-    -Strain-       -A-       -B-       -C-       -D-
 Species1    Strain1.1         0.2       0.1       0.1       0.4
 Species1    Strain1.1         0.2       0.7       0.2       0.2
 Species1    Strain1.2         0.1       0.6       0.1       0.3
 Species1    Strain1.1         0.2       0.6       0.2       0.6
 Species2    Strain2.1         0.3       0.3       0.3       0.1
 Species2    Strain2.2         0.6       0.2       0.6       0.2
 Species2    Strain2.2         0.2       0.1       0.4       0.2

我想计算每个列 (A-D) 的每个唯一应变的平均值(平均值)我该怎么做?

我尝试了df.groupby(['Strain','Species']).mean().mean(1),但这似乎仍然在结果数据框中为我提供了多个版本的菌株,而不是每个独特菌株的每列的平均值。

基本上我想要每个菌株的 A、B、C 和 D 的平均结果。

抱歉不清楚,我正在努力解决这个问题,而且我对编程很陌生!

【问题讨论】:

  • 这还不是很清楚——你关心菌株对物种的分组吗?如果没有,那么您可以执行df.groupby(['Strain']).mean(),这将为您提供每个菌株A,B,C,D 的平均值。
  • 如果不是这种情况,您能否编辑您的问题以包含预期结果。
  • 是的,这在同时使用“应变”和“物种”时有效,谢谢!

标签: python pandas


【解决方案1】:

IIUC,你只需调用

df.groupby(['Species', 'Strain']).mean()

                      A         B         C    D 
Species   Strain                               
Species1  Strain1.1  0.2  0.466667  0.166667  0.4
          Strain1.2  0.1  0.600000  0.100000  0.3
Species2  Strain2.1  0.3  0.300000  0.300000  0.1
          Strain2.2  0.4  0.150000  0.500000  0.2

当您调用 df.groupby(['Strain','Species']).mean().mean(1) 时,您所做的是取 ABCD 中的 4 个均值的平均值。 mean(1) 表示在第一个轴上取平均值(在列上)。

【讨论】:

  • 谢谢,虽然当我这样做时,我仍然会得到同一菌株的多个结果,所以我会得到,例如,菌株 1.1 重复多次,而我只想要所有副本的平均值应变 1.1
  • 没关系!我没有保存到新的数据框,使用 df2 = df.groupby(['Species', 'Strain']).mean() 工作了,谢谢!
猜你喜欢
  • 2022-11-14
  • 1970-01-01
  • 2021-02-27
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
相关资源
最近更新 更多