DataFrame:按一列分组并平均其他列
DataFrame: Group by one column and average other columns
假设我有以下 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]})
你只需要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
data.groupby('group').agg({('average_state', 'mean')})
您应该首先创建一个过滤数据框来过滤您所需的数据框。
该算法将首先创建一个要过滤的值列表,然后将状态中的 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)
我的电脑上没有运行它,但你可以测试它,但这个算法应该有效。
假设我有以下 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]})
你只需要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
data.groupby('group').agg({('average_state', 'mean')})
您应该首先创建一个过滤数据框来过滤您所需的数据框。 该算法将首先创建一个要过滤的值列表,然后将状态中的 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)
我的电脑上没有运行它,但你可以测试它,但这个算法应该有效。