DataFrame:按一列分组并平均其他列

时间:2020-09-23 14:00:01

标签: python pandas dataframe pandas-groupby average

说我有以下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]})

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

let uuid = UUID().uuidString

答案 2 :(得分:0)

您首先应该创建一个过滤的数据框,以过滤所需的数据框。 该算法将首先创建要过滤的值列表,然后将状态中的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)

我还没有在我的电脑上运行它,但是您可以对其进行测试,但是该算法应该可以工作。

相关问题