获取数据框的列相对于其他两列的平均值和比例

时间:2017-04-29 16:02:47

标签: python pandas dataframe

我有一个包含4列的DataFrame(df):Age,Request_ID,Gender和Type。我的价值观如下:

Age  Request_ID  Gender Type  
 20           1  M      A  
 28           2  F      B  
 30           1  M      C  
 50           7  M      A  
 19          20  F      B 

现在我想根据性别和类型以及新数据框中每个性别和类型的不同Request_ID(比例)得到平均年龄。
例如,预期的结果将是:

Gender Type Average_Age Sum_Req_IDs  
F      A           24.5          50  
M      A             40          23  
F      B           23.7         100  
M      B           35.3         200  
F      C           29.1          30  
M      C           30.4          98  

到目前为止我的代码是:

df.groupby(['Gender','Type'],as_index = False)['Age'].mean()  

但这只返回平均年龄 你能帮我完成一下吗?

1 个答案:

答案 0 :(得分:1)

Age汇总列meanaggnunique需要droplevel {/ 3}}:

Request_ID

另一种可能的解决方案是df = df.groupby(['Gender','Type'],as_index=False).agg({'Age':'mean', 'Request_ID':'nunique'}) #if necessary rename columns df = df.rename(columns={'Age':'Average_Age','Request_ID':'Sum_Req_IDs'}) print (df) Gender Type Sum_Req_IDs Average_Age 0 F B 2 23.5 1 M A 2 35.0 2 M C 1 30.0 使用nested dict - aggregation中的输出为MultiIndex,其中必须按Classic Java - Project Properties删除顶级:

columns

编辑:

对我来说有点不清楚df = df.groupby(['Gender','Type']).agg({'Age':{'Average_Age': 'mean'}, 'Request_ID':{'Sum_Req_IDs':'nunique'}}) df.columns = df.columns.droplevel(0) df = df.reset_index() print (df) Gender Type Sum_Req_IDs Average_Age 0 F B 2 23.5 1 M A 2 35.0 2 M C 1 30.0 是否正确聚合,因此更改数据以获得更好的样本:

Request_ID