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

Python 获取数据帧的一列相对于其他两列的平均值和比例,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框(df),有4列:年龄、请求ID、性别和类型。我的值如下所示: 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 现在我想得到基于性别和类型的平均年龄,以及在新数据框中每个性别和类型的不同请求I

我有一个数据框(
df
),有4列:年龄、请求ID、性别和类型。我的值如下所示:

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 
现在我想得到基于性别和类型的平均年龄,以及在新数据框中每个性别和类型的不同请求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()  
但这只返回平均年龄。
您能帮我完成这个吗?

似乎您需要通过
平均值
对聚合列
年龄
和列
请求\u ID
到:

另一种可能的解决方案是使用
嵌套dict
进行
聚合
-输出是
列中的
多索引
,必要时通过以下方式删除顶层:

编辑:

对于我来说,有点不清楚是否正确聚合了
Request\u ID
,因此更改了数据以获得更好的样本:

print (df)
  Age  Request_ID Gender Type
0   20           3      M    A
1   28           3      F    B
2   30           3      M    C
3   50           3      M    A
4   19          20      F    B

#nunique - number of unique values per Gender and Type groups
df1 = df.groupby(['Gender','Type'],as_index=False).agg({'Age':'mean','Request_ID':'nunique'})
print (df1)
  Gender Type  Request_ID   Age
0      F    B           2  23.5
1      M    A           1  35.0
2      M    C           1  30.0

#nunique - number of all values per Gender and Type groups
df2 = df.groupby(['Gender','Type'],as_index = False).agg({'Age':'mean', 'Request_ID':'size'})
print (df2)
  Gender Type  Request_ID   Age
0      F    B           2  23.5
1      M    A           2  35.0
2      M    C           1  30.0

#nunique - sum values per Gender and Type groups
df3 = df.groupby(['Gender','Type'],as_index = False).agg({'Age': 'mean', 'Request_ID':'sum'})
print (df3)
  Gender Type  Request_ID   Age
0      F    B          23  23.5
1      M    A           6  35.0
2      M    C           3  30.0

使用Excel,您可以使用数据透视表来解决此问题。数据帧也有类似于透视表的东西。搜索一下。(请格式化您的问题,例如,将您的数据框放入代码块中)
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
print (df)
  Age  Request_ID Gender Type
0   20           3      M    A
1   28           3      F    B
2   30           3      M    C
3   50           3      M    A
4   19          20      F    B

#nunique - number of unique values per Gender and Type groups
df1 = df.groupby(['Gender','Type'],as_index=False).agg({'Age':'mean','Request_ID':'nunique'})
print (df1)
  Gender Type  Request_ID   Age
0      F    B           2  23.5
1      M    A           1  35.0
2      M    C           1  30.0

#nunique - number of all values per Gender and Type groups
df2 = df.groupby(['Gender','Type'],as_index = False).agg({'Age':'mean', 'Request_ID':'size'})
print (df2)
  Gender Type  Request_ID   Age
0      F    B           2  23.5
1      M    A           2  35.0
2      M    C           1  30.0

#nunique - sum values per Gender and Type groups
df3 = df.groupby(['Gender','Type'],as_index = False).agg({'Age': 'mean', 'Request_ID':'sum'})
print (df3)
  Gender Type  Request_ID   Age
0      F    B          23  23.5
1      M    A           6  35.0
2      M    C           3  30.0