【问题标题】:How to find top 3 values in amount, based on another column by using pandas如何使用 pandas 根据另一列查找金额的前 3 个值
【发布时间】:2021-10-19 08:55:58
【问题描述】:

  • A、B、C、D、E 是游戏。有 80 种不同的游戏
  • 此数据框有 5,000 行

我如何列出前 3 名的游戏?

【问题讨论】:

  • 你能从样本数据中添加预期的输出吗?

标签: python pandas pandas-groupby data-analysis


【解决方案1】:

首先将DataFrame.explode 用于标量列表,然后通过DataFrame.drop_duplicates 删除重复项,最后通过Series.value_counts 使用Series.head 获取top3,因为value_counts 默认排序:

top3 = df.explode('Games').drop_duplicates(['Games','Room'])['Games'].value_counts().head(3)

【讨论】:

    【解决方案2】:

    分解您的 Games 列(如果 Games 包含真正的 Python 列表)然后删除重复项(根据您的旁注)并根据您的需要使用具有不同参数的 value_counts

    1. 所有房间前 3 名:
    >>> df.explode('Games') \
          .drop_duplicates(['Games', 'Rooms']) \
          .value_counts('Games').head(3)
    Games
    A    2
    B    2
    C    2
    dtype: int64
    
    1. 每间客房前 3 名:
    >>> df.explode('Games') \
          .drop_duplicates(['Games', 'Rooms']) \
          .value_counts(['Games', 'Rooms']).head(3)
    Games  Rooms
    A      North    1
           West     1
    B      East     1
    dtype: int64
    

    设置:

    data = {'Games': [['A', 'B', 'C'], ['B', 'D'], ['B', 'E'], ['A', 'C'], ['D']],
            'Rooms': ['West', 'East', 'East', 'North', 'South']}
    df = pd.DataFrame(data)
    print(df)
    
    # Output:
           Games  Rooms
    0  [A, B, C]   West
    1     [B, D]   East
    2     [B, E]   East
    3     [A, C]  North
    4        [D]  South
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2012-10-15
      • 2019-10-03
      • 2020-06-08
      • 2021-09-15
      相关资源
      最近更新 更多