gpt4 book ai didi

Pandas 分组数据框,类别列具有最大总和值

转载 作者:行者123 更新时间:2023-12-04 10:00:30 25 4
gpt4 key购买 nike

我想用列对 Pandas 数据框进行分组

datetime index
category
product_name
sale_price.

我需要以这样的方式对它进行分组
year_month
sum_of_sale_price_for_year_month
product_name_max_contributed_price_year_month

如果数据框具有类似的值

| datetime | category | product_name | sale_price|
| |
|2012-07-04 | category_1 | product_1 | 120 |
|2012-07-07 | category_1 | product_2 | 270 |
|2012-07-09 | category_1 | product_7 | 100 |
|2012-07-12 | category_1 | product_5 | 315 |


输出应该是
| year_month | product_name_max_contributed_price_year_month | sum_of_sale_price_for_year_month|
| |
| 2012-07 | product_5 | 805 |

列名可以是任何东西,只是为了理解。
我已经能够应用以下过程:
grouped_df = df.groupby([(df.index.year.rename('year')),(df.index.month.rename('month'))]).agg({"sale_price:np.sum"})
grouped_df['year_month'] = grouped_df [['year','month']].apply(lambda x: datetime.strptime('{}-{}'.format(x[1],x[0]), '%m-%Y').strftime('%b-%y'), axis=1)

我需要额外的列来为 product_name 提供在时间范围内的最大贡献。
它要么我在 grouped_df 中搜索与年和月的最大值相对应的每个 product_name 并创建一个系列并附加到它。
什么是最好的方法 ?

最佳答案

创建数据框

import pandas as pd

df = pd.DataFrame({'datetime': ['2012-07-04', '2012-07-07', '2012-07-09 ', '2012-07-12'],
'category': ['category1', 'category1', 'category1', 'category1'],
'product_name': ['product_1','product_2','product_7','product_5'],
'sale_price': [120,270,100,315]})

创建年月列:
df['year_month'] = pd.to_datetime(df['datetime']).dt.to_period('M')

查找月份的销售额:
s = df.groupby(['year_month'])['sale_price'].sum().to_frame().rename(columns={"sale_price": "sum_of_sale_price_year_month"}).reset_index()

查找销售额最大的产品。 idxmax 是关键函数。它返回在请求的 groupby 轴上第一次出现最高销售价格的索引,并将其放入 loc 函数中,该函数拉出与该索引关联的整行。然后从这一行中提取 year_month 和 product_name 并重命名其中一个并重置索引,以便在下一步中进行连接。
grouped_df = df.loc[df.groupby(['year_month'])['sale_price'].idxmax()][['year_month','product_name']].rename(columns={"product_name": "product_name_max_contributed_price_year_month"}).reset_index(drop=True)

合并年月字段:
df2 = pd.merge(s, grouped_df, on='year_month')
      year_month    sum_of_sale_price_year_month product_name_max_contributed_price_year_month
0 2012-07 805 product_5

关于 Pandas 分组数据框,类别列具有最大总和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61842614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com