【问题标题】:how to calculate the mean of an array using grouping variables in python?如何使用python中的分组变量计算数组的平均值?
【发布时间】:2019-06-10 17:45:25
【问题描述】:

我想在 python 中使用不同的分组变量来计算数组的平均值。例如,我想计算column1 中所有值的平均值,其中column2 == 2column3 == a + 3

我尝试了 for 循环和 if 循环,但它似乎非常复杂,而且我的数据维度也太混乱了。是否有另一种方法可以对某些条件下的数据进行分组并分别计算每种条件组合的平均值?

我正在寻找 R 中的 group_by()summarise()aggregate() 之类的函数,仅适用于 python。

这是我目前尝试过的循环:

    for j in range(0,len(e_data)): #iterate for each row in e_data
      if e_data[j,6] == 0.0082:
        if e_data[j,1] == ped1:
          e_data[j,7] = mean(e_data[:,4][np.where((e_data[:,0] == (ped1+0.0082)) & (e_data[:,5] == i))])
        elif e_data[j,1] == ped2:
          e_data[j,7] = mean(e_data[:,4][np.where((e_data[:,0] == (ped2+0.0082)) & (e_data[:,5] == i))])
        elif e_data[j,1] == ped3:
          e_data[j,7] = mean(e_data[:,4][np.where((e_data[:,0] == (ped3+0.0082)) & (e_data[:,5] == i))]))
      if e_data[j,6] == 0.001:
        if e_data[j,1] == ped1:
          e_data[j,7] = mean(e_data[:,4][np.where((e_data[:,0] == (ped1+0.001)) & (e_data[:,5] == i))])
        elif e_data[j,1] == ped2:
          e_data[j,7] = mean(e_data[:,4][np.where((e_data[:,0] == (ped2+0.001)) & (e_data[:,5] == i))])
        elif e_data[j,1] == ped3:
          e_data[j,7] = mean(e_data[:,4][np.where((e_data[:,0] == (ped3+0.001)) & (e_data[:,5] == i))])
      if e_data[j,6] == 0.0235:
        if e_data[j,1] == ped1:
          e_data[j,7] = mean(e_data[:,4][np.where((e_data[:,0] == (ped1+0.0235)) & (e_data[:,5] == i))])
        elif e_data[j,1] == ped2:
          e_data[j,7] = mean(e_data[:,4][np.where((e_data[:,0] == (ped2+0.0235)) & (e_data[:,5] == i))])

【问题讨论】:

    标签: python grouping mean


    【解决方案1】:

    我建议您结帐Pandas,这正是您所需要的。

    在 Python 世界中,Pandas 是您所描述的数据分析任务的最终解决方案。

    将数据(最好是 .csv 格式)导入 pandas 后:

    import pandas as pd
    
    df = pd.read_csv('filepath_to_your_data')
    
    ## I want to calculate the mean of all values in column1, for which column2 == 2 and column3 == a + 3
    df[(df.column2==2) & (df.column3 == a+3)].loc[:, 'column1'].mean()
    

    Pandas 还提供 groupbydescribeagg

    【讨论】:

    • 好的,谢谢,这已经很有帮助了。所以现在在第 2 列中,我有 5 个可能的值,在第 3 列中,我有 6 个可能的值,我希望获得所有这些值组合的平均值,因此每组总共有 30 个平均值(我有 10 个组)。我是否必须编写相同的代码行然后 300 次,还是有其他方法来分组和缩短它?
    • Pandas 有一个groupby 函数,你只需要执行 df.groupby(['column2', 'column3')['column1'].mean(),查看此处的示例:tutorialspoint.com/python_pandas/python_pandas_groupby.htm 如果这有帮助,请考虑接受此答案
    猜你喜欢
    • 2023-04-04
    • 2018-10-04
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多