数据框(DataFrame):按一列进行分组并求其他列的平均值

4

假设我有以下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列: groups('1'或者'2'), 并对'state''value'这两列进行平均值计算,因此DataFrame看起来是这样的:

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

5

你只需要使用 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
data.groupby('group').agg({('average_state', 'mean')})

这会返回 NameError: name 'average_state' is not defined - DeepNet

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)

我还没有在我的电脑上运行过它,但你可以测试一下,这个算法应该是有效的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接