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