Pandas Groupby 对特定列进行聚合函数,显示结果中的所有列

我想要一个基于 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)


忽然笑
浏览 173回答 1
1回答

BIG阳

我们可以使用GroupBy.agg字典来使用和设置每列所需的聚合方法。在这种情况下,我们只需要first和sum:dfg = df.groupby("_idMutation", as_index=False).agg({    "typeOfSearch": "first",    "price": "first",    "typeOfBuilding": "first",    "surface": "sum",    "nbRoom": "sum"})  _idMutation typeOfSearch     price typeOfBuilding  surface  nbRoom0      2018-1         Sold  109000.0    Appartement     73.0     4.01      2018-2         Sold  239300.0          House    265.0     8.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python