我有一个包含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()
但这只返回平均年龄 你能帮我完成一下吗?
答案 0 :(得分:1)
Age
汇总列mean
和agg
列nunique
需要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