【问题标题】:How to only keep the largest value per year per customer using pandas?如何使用 pandas 仅保持每位客户每年的最大价值?
【发布时间】:2020-09-08 13:14:42
【问题描述】:

我试图找出这个问题:

我有四列(客户、产品、年份、价格)

现在,我想知道每个客户每年最昂贵的产品,并删除他们其余的购买历史,以便最终(10 年历史)我得到每个客户 10 种产品的列表(鉴于他们每年都购买)。

我尝试了很多东西,但无法正常工作,请帮助熊猫初学者。

Example DF

Example Output

谢谢!

【问题讨论】:

标签: python pandas pandas-groupby


【解决方案1】:

您可以使用groupby

result = (
    df.sort_values(['Year', 'Customer', 'Price'], ascending=[True, True, False])
      .groupby(['Year', 'Customer'])
      .head(1)
) 

【讨论】:

    【解决方案2】:

    我有 2 条建议:

    1------- 常见的排序分组

    result1=df.sort_values(['Customer', 'Price'],ascending=[1,0]).groupby(['Customer', 'Year']).head(10)
    

    这看起来更适合您提供的输出

    2-------- 使用 pandas.pivot_table:

    import pandas as pd
    result2=pd.pivot_table(df, index=['Year', 'Customer', 'Product'], values='Price', aggfunc='max')
    

    'result2' 是一个数据框,因此您可以四处玩耍并通过一些排序获得您想要的东西。如果您需要任何帮助,请告诉我

    【讨论】:

    • 非常感谢!第二个建议对我有用!
    猜你喜欢
    • 2014-07-26
    • 1970-01-01
    • 2016-09-01
    • 2020-07-03
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多