【问题标题】:DataFrame: Group by one column and average other columnsDataFrame:按一列分组并平均其他列
【发布时间】:2020-09-23 14:00:01
【问题描述】:

假设我有以下 DataFrame:

data = pd.DataFrame({'id' : ['1','2','3','4','5'], 'group' : ['1','1','2','1','2'], 
      'state' : ['True','False','False','True','True'], 'value' : [11,12,5,8,3]})

我想创建一个新的 DataFrame,保留 3 列:组('1''2'),并对列 'state''value' 进行平均,因此 DataFrame 将是:

grouped_averaged = pd.DataFrame({'group' : ['1','2'], 'average_state' : [0.66,0.5], 'value' : [7,3]})

【问题讨论】:

    标签: python pandas dataframe pandas-groupby average


    【解决方案1】:

    你只需要groupby:

    data['state'] = data['state'].eq('True')
    data.drop('id',axis=1).groupby('group', as_index=False).mean()
    

    输出:

      group     state      value
    0     1  0.666667  10.333333
    1     2  0.500000   4.000000
    

    【讨论】:

      【解决方案2】:
      data.groupby('group').agg({('average_state', 'mean')})
      

      【讨论】:

      • 返回NameError: name 'average_state' is not defined
      【解决方案3】:

      您应该首先创建一个过滤数据框来过滤您所需的数据框。 该算法将首先创建一个要过滤的值列表,然后将状态中的 True 和 False 的值更改为 1 和 0,然后使用聚合函数对它们进行分组。

      df = pd.DataFrame({'id' : ['1','2','3','4','5'], 'group' : ['1','1','2','1','2'], 
            'state' : ['True','False','False','True','True'], 'value' : [11,12,5,8,3]})
      filter_values=['1','2']
      df=df.loc[df['group'].isin(filter_values)]
      df['state']=(df['state']=="True").astype(int)
      df['state']=(df['state']=="False").astype(int)
      aggregate_functions={'state':'mean','value':'mean'}
      clean_df=df.groupby(['group']).aggregate(aggregate_functions)
      

      我还没有在我的电脑上运行它,但你可以测试它,但这个算法应该可以工作。

      【讨论】:

        猜你喜欢
        • 2021-07-09
        • 2021-02-15
        • 2019-04-07
        • 1970-01-01
        • 2020-03-11
        • 2021-04-05
        • 1970-01-01
        • 1970-01-01
        • 2020-02-08
        相关资源
        最近更新 更多