• 力扣 关于pandas分组聚合的问题


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 伪编辑科学家 2024-10-17 21:48 采纳率: 16.7% 浏览 6 首页/ 编程语言 / 力扣 关于pandas分组聚合的问题 python数据分析leetcode https://leetcode.cn/problems/game-play-analysis-ii/ Table: Activity +--------------+---------+ | Column Name | Type | +--------------+---------+ | player_id | int | | device_id | int | | event_date | date | | games_played | int | +--------------+---------+ (player_id, event_date) 是这个表的两个主键(具有唯一值的列的组合) 这个表显示的是某些游戏玩家的游戏活动情况 每一行是在某天使用某个设备登出之前登录并玩多个游戏(可能为0)的玩家的记录 请编写解决方案,描述每一个玩家首次登陆的设备名称 返回结果格式如以下示例: 示例 1: 输入: Activity table: +-----------+-----------+------------+--------------+ | player_id | device_id | event_date | games_played | +-----------+-----------+------------+--------------+ | 1 | 2 | 2016-03-01 | 5 | | 1 | 2 | 2016-05-02 | 6 | | 2 | 3 | 2017-06-25 | 1 | | 3 | 1 | 2016-03-02 | 0 | | 3 | 4 | 2018-07-03 | 5 | +-----------+-----------+------------+--------------+ 输出: +-----------+-----------+ | player_id | device_id | +-----------+-----------+ | 1 | 2 | | 2 | 3 | | 3 | 1 | +-----------+-----------+ 在用pandas刷力扣的时候遇到了,这是一道分组聚合的题,我的思路是这样的: import pandas as pd def game_analysis(activity: pd.DataFrame) -> pd.DataFrame: #将原数据集的event_date列分组后进行最小值聚合 activity['event_date']=activity.groupby('player_id').agg({'event_date':'min'}) #按行删除聚合后event_date列为空的数据 activity=activity.dropna(axis=0).reset_index(drop=True) #返回要求的数据 return activity[['player_id','device_id']] 我不太明白这种聚合的方式为什么不正确,请各位解答一下,感激不尽 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    1条回答 默认 最新

    • 无疆76 2024-10-17 21:49
      关注

      以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

      你的思路基本上是正确的,但是有一点需要注意,你在对 event_date 进行分组聚合的时候,应该使用 min 函数来获取每个玩家的最早游戏日期,而不是对整个 event_date 列进行分组聚合。然后你需要找到与最早游戏日期对应的设备ID。以下是修正后的代码:

      import pandas as pd
      
      def game_analysis(activity: pd.DataFrame) -> pd.DataFrame:
          # 找到每个玩家的最早游戏日期
          min_dates = activity.groupby('player_id')['event_date'].min().reset_index()
          min_dates.columns = ['player_id', 'min_event_date']  # 重命名列名以便后续操作
          
          # 找到与最早游戏日期对应的设备ID
          result = pd.merge(min_dates, activity, on=['player_id', 'event_date'], how='left')
          result = result[['player_id', 'device_id']]  # 选择需要的列
          
          return result.drop_duplicates()  # 去除重复的行
      

      这样你就能得到每个玩家首次登录的设备名称了。这里使用了 pd.merge 函数来合并数据,然后通过选择需要的列来得到最终结果。注意使用 drop_duplicates 来去除可能的重复行,确保每个玩家只出现一次。

      评论
      编辑
      预览

      报告相同问题?

    • 相关阅读:
      viple模拟器使用(一):线控模拟
      数据湖:数据库数据迁移工具Sqoop
      vue自适应布局(各种浏览器,分辨率)
      NLP工具——自制英文时间标准化工具
      已解决java.security.acl.AclNotFoundException异常的正确解决方法,亲测有效!!!
      《网页设计与制作-初级》
      如何利用BIGEMAP软件查看历史影像
      跨境电商引流之Reddit营销,入门保姆级攻略
      初出茅庐市值1亿美金的监控产品Sentry体验与架构
      数据结构上机实验——栈和队列的实现、栈和队列的应用、进制转换、约瑟夫环问题
    • 原文地址:https://ask.csdn.net/questions/8153146