簡體   English   中英

DataFrame:按一列分組並平均其他列

[英]DataFrame: Group by one column and average other columns

假設我有以下數據幀:

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)

我還沒有在我的電腦上運行它,但你可以測試它,但這個算法應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM