我想要一个基于 id 的 grouby 和 sum,但显示所有列作为结果。
示例代码
import pandas as pd
import numpy as np
mre = [
["2018-1", "Sold", 109000.0, "Appartement", 73.0, 4.0],
["2018-1", "Sold", 109000.0, "Appartement", "NaN", 0.0],
["2018-2", "Sold", 239300.0, "House", 163.0, 4.0],
["2018-2", "Sold", 239300.0, "House", 51.0, 2.0],
["2018-2", "Sold", 239300.0, "House", 51.0, 2.0]
]
df = pd.DataFrame(mre)
# Rename columns
df.columns = ["_idMutation", "typeOfSearch",
"price", "typeOfBuilding", "surface", "nbRoom"]
df["surface"] = df["surface"].astype(float)
print(df)
基础数据框
_idMutation typeOfSearch price typeOfBuilding surface nbRoom
0 2018-1 Sold 109000.0 Appartement 73.0 4.0
1 2018-1 Sold 109000.0 Appartement NaN 0.0
2 2018-2 Sold 239300.0 House 163.0 4.0
3 2018-2 Sold 239300.0 House 51.0 2.0
4 2018-2 Sold 239300.0 House 51.0 2.0
预期成绩
是groupby基于_idMutation,它对surface和 进行求和nbRoom,但不影响其他行。我想显示所有列,删除重复项_idMutation并显示结果groupby
_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
当前代码
以下解决方案产生预期结果。我有 1460 万行,而我提出的解决方案看起来并没有优化。
# Groupby on _idMutation & sum ["surface", "nbRoom"]
gb_df = df[["surface", "nbRoom"]].groupby(df["_idMutation"]).sum()
# Delete duplicates _idMutation
df.drop_duplicates(subset=["_idMutation"], inplace=True)
# Set _idMutation as df index
df.set_index("_idMutation", inplace=True)
# Concat df with gb_df
df = pd.concat(
[df[["typeOfSearch", "price", "typeOfBuilding"]], gb_df], axis=1)
BIG阳
相关分类