【问题标题】:Compute row average in pandas计算 pandas 中的行平均值
【发布时间】:2022-04-07 03:31:39
【问题描述】:
       Y1961      Y1962      Y1963      Y1964      Y1965  Region
0  82.567307  83.104757  83.183700  83.030338  82.831958  US
1   2.699372   2.610110   2.587919   2.696451   2.846247  US
2  14.131355  13.690028  13.599516  13.649176  13.649046  US
3   0.048589   0.046982   0.046583   0.046225   0.051750  US
4   0.553377   0.548123   0.582282   0.577811   0.620999  US

在上面的数据框中,我想得到每一行的平均值。目前,我正在这样做:

df.mean(axis=0)

但是,这也取消了 Region 列。如何计算均值并保留 Region 列

【问题讨论】:

  • 嗨,你能发布实际的和你期望的吗?
  • 我完全理解人们可能认为 0 表示行和 1 表示按列的意思。

标签: python pandas


【解决方案1】:

您可以指定一个新列。您还需要沿行计算平均值,因此请使用axis=1

df['mean'] = df.mean(axis=1)
>>> df
       Y1961      Y1962      Y1963      Y1964      Y1965 Region       mean
0  82.567307  83.104757  83.183700  83.030338  82.831958     US  82.943612
1   2.699372   2.610110   2.587919   2.696451   2.846247     US   2.688020
2  14.131355  13.690028  13.599516  13.649176  13.649046     US  13.743824
3   0.048589   0.046982   0.046583   0.046225   0.051750     US   0.048026
4   0.553377   0.548123   0.582282   0.577811   0.620999     US   0.576518

【讨论】:

  • 感谢@Alexander,这行得通!我确实收到一条警告消息:正在尝试在 DataFrame 中的切片副本上设置一个值。尝试使用 .loc[row_indexer,col_indexer] = value 代替。我怎样才能避免这种情况?
  • 这应该消除警告:df = df.assign(mean=df.mean(axis=1))
【解决方案2】:

我们可以使用 range 函数找到一行的平均值,即在您的情况下,从 Y1961 列到 Y1965

df['mean'] = df.iloc[:, 0:4].mean(axis=1)

如果你想选择单个列

df['mean'] = df.iloc[:, [0,1,2,3,4].mean(axis=1)

【讨论】:

    【解决方案3】:

    我想这就是你要找的:

    df.drop('Region', axis=1).apply(lambda x: x.mean(), axis=1)
    

    【讨论】:

    • 我喜欢这个解决方案。虽然它比公认的答案更复杂,但它让您了解如何使用 apply 函数自行提取相似的统计数据。
    【解决方案4】:

    根据列名取平均值

    我只是分享这个,这对于那些想要根据他们的名字取几列的平均值而不是计算列索引的人来说可能很有用。这只需使用 pandas 的 loc 而不是 iloc 即可完成。例如,取奇数年的平均值为:

    df["mean_odd_year"] = df.loc[:, ["Y1961","Y1963","Y1965"]].mean(axis = 1)
    

    【讨论】:

      【解决方案5】:

      如果您希望平均列。试试这个,

      df.drop('Region', axis=1).apply(lambda x: x.mean())
      
      # it drops the Region column
      df.drop('Region', axis=1,inplace=True)
      

      【讨论】:

      • 我喜欢这个答案,但这个问题要求按行平均。
      猜你喜欢
      • 2021-11-08
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 2019-09-09
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多