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

2024-03-29 00:22:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧(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 

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

^{pr2}$

到目前为止,我的代码是:

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

但这只返回平均年龄。
你能帮我完成这个吗?在


Tags: 数据代码id类型dfagerequesttype
1条回答
网友
1楼 · 发布于 2024-03-29 00:22:46

似乎您需要^{}作为聚合列Age,按mean和列{}到{a2}:

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-输出是columns中的MultiIndex,其中需要通过^{}删除顶层:

^{pr2}$

编辑:

对我来说,有点不清楚Request_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

相关问题 更多 >