groupby两列的总和最高(Pandas)

8ulbf1ek  于 2022-10-22  发布在  Python
关注(0)|答案(4)|浏览(152)

查看2月份哪个客户的价格最高。2/1/2022

数据

client  box Price   date
charles AA  5,000   2/1/2022
charles AA  5,050   2/1/2022
charles AA  5,075   2/1/2022
cara    BB  25,116  2/1/2022
cara    BB  5,154   2/1/2022
lu      CC  0       2/1/2022
max     DD  10,000  3/1/2022

所需的

client   box Price   date
   cara     BB  30,270  2/1/2022

正在执行

df.groupby(['client','date']) \
.agg({'Price':'sum'}).reset_index() \

任何建议都是有益的。

c7rzv4ha

c7rzv4ha1#

idxmax将返回最大值的索引,然后可以使用该索引查找所需的行。请注意,在两个客户以最高价格平手的情况下,只会返回第一次。
例子:

(
    df
    # Fist filter to only Februrary
    .loc[lambda df_: df_["date"].dt.month == 2]
    .groupby(["client", "box"])["Price"]
    .sum()
    .reset_index()
    # Then select where price is max
    .loc[lambda df_: df_["Price"].idxmax()]
)
68bkxrlz

68bkxrlz2#

import pandas as pd

df = pd.DataFrame({"client": ["charles", "charles", "charles", "cara", "cara", "lu", "max"],
                    "box": ["AA", "AA", "AA", "BB", "BB", "CC", "DD"],
                    "price": [5000, 5050, 5075, 25116, 5154, 0, 10000],
                    "date": ["2/1/2022", "2/1/2022", "2/1/2022", "2/1/2022", "2/1/2022", "2/1/2022", "3/1/2022"]})

# print(df)

print(df.groupby(by= ["client", "box", "date"]).price.aggregate('sum'))
7d7tgy0s

7d7tgy0s3#

根据OP的期望输出,这里有一个建议:

gdf = df.groupby(['client','box','date']).agg({'Price':'sum'}).reset_index()
gdf.loc[gdf.Price.idxmax()]
9vw9lbht

9vw9lbht4#

如果每个客户端的框始终相同。

df = df.groupby(["client", "date"]).agg({"box": "first", "Price": "sum"})
df = df[df["Price"].eq(df["Price"].max())].reset_index()

如果每个客户端的框可能不同。

df = df.groupby(["client", "date", "box"]).agg({"Price": "sum"})
df = df[df["Price"].eq(df["Price"].max())].reset_index()

相关问题