Python 使用特定列上的Groupby聚合函数,显示结果中的所有列
我希望有一个基于id的grouby和sum,但结果显示所有列 示例代码Python 使用特定列上的Groupby聚合函数,显示结果中的所有列,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我希望有一个基于id的grouby和sum,但结果显示所有列 示例代码 将熊猫作为pd导入 将numpy作为np导入 mre=[ [“2018-1”,“出售”,109000.0,“公寓”,73.0,4.0], [“2018-1”,“出售”,109000.0,“公寓”,“南”,0.0], [“2018-2”,“出售”,239300.0,“房屋”,163.0,4.0], [“2018-2”,“出售”,239300.0,“房屋”,51.0,2.0], [“2018-2”,“出售”,239300.0,“
将熊猫作为pd导入
将numpy作为np导入
mre=[
[“2018-1”,“出售”,109000.0,“公寓”,73.0,4.0],
[“2018-1”,“出售”,109000.0,“公寓”,“南”,0.0],
[“2018-2”,“出售”,239300.0,“房屋”,163.0,4.0],
[“2018-2”,“出售”,239300.0,“房屋”,51.0,2.0],
[“2018-2”,“出售”,239300.0,“房屋”,51.0,2.0]
]
df=pd.数据帧(mre)
#重命名列
df.columns=[“\u idMutation”,“typeOfSearch”,
“价格”、“建筑类型”、“表面”、“nbRoom”]
df[“表面”]=df[“表面”].aType(浮动)
打印(df)
基本数据帧
\u id变异类型搜索价格类型建筑表面n房间
0 2018-1售出109000.0套公寓73.0 4.0套
2018年1月售出109000.0套公寓NaN 0.0
2 2018-2售出239300.0套163.0 4.0
3 2018-2售出239300.0套51.0 2.0
4 2018-2售出239300.0套51.0 2.0
预期结果
groupby
基于\u idMutation
,它对曲面
和nbRoom
求和,但不影响其他行。我想显示所有列,删除重复的\u
并显示groupby
\u id变异类型搜索价格类型建筑表面n房间
0 2018-1售出109000.0套公寓73.0 4.0套
2018年1月2日售出239300.0套住房265.08.0套
现行代码
下面的解决方案产生了预期的结果。我有1460万行,我提出的解决方案看起来没有优化
#Groupby on _idMutation&sum[“surface”,“nbRoom”]
gb_df=df[[“surface”,“nbRoom”]].groupby(df[“_idMutation”]).sum()
#删除重复项
drop_duplicates(subset=[“_idMutation”],inplace=True)
#将_id设置为df索引
df.set_索引(“_idMutation”,inplace=True)
#Concat df与gb_df
df=pd.concat(
[df[[“搜索类型”、“价格”、“建筑类型”]],gb_df],轴=1)
我们可以使用GroupBy.agg
并使用dict设置每列所需的聚合方法。在这种情况下,我们只需要首先
和求和
:
dfg = df.groupby("_idMutation", as_index=False).agg({
"typeOfSearch": "first",
"price": "first",
"typeOfBuilding": "first",
"surface": "sum",
"nbRoom": "sum"
})
2018-2年
nbRoom
的nbRoom
之和错误,您可以编辑吗?是的,很抱歉:)
_idMutation typeOfSearch price typeOfBuilding surface nbRoom
0 2018-1 Sold 109000.0 Appartement 73.0 4.0
1 2018-2 Sold 239300.0 House 265.0 8.0