熊猫改变群体中的位置/排名

2024-02-16

我有以下内容DataFrame两组动物以及它们每天吃多少食物,

df = pd.DataFrame({'animals': ['cat', 'cat', 'dog', 'dog', 'rat', 
                               'cat', 'rat', 'rat', 'dog', 'cat'],
                   'food': [1, 2, 2, 5, 3, 1, 4, 0, 6, 5]},
                  index=pd.MultiIndex.from_product([['group1'] + ['group2'],
                                                    list(range(5))])
                     ).rename_axis(['groups', 'day'])

df

            animals food
groups  day     
group1  0   cat     1
        1   cat     2
        2   dog     2
        3   dog     5
        4   rat     3
group2  0   cat     1
        1   rat     4
        2   rat     0
        3   dog     6
        4   cat     5

我可以“映射”/将其转换为一个新列,以查看每只动物每天应该给予多少食物daily_meal.

df['daily_meal'] = df.groupby(['animals', 'groups']).transform('mean')
df

            animals food    daily_meal
groups  day         
group1  0   cat     1       1.5
        1   cat     2       1.5
        2   dog     2       3.5
        3   dog     5       3.5
        4   rat     3       3.0
group2  0   cat     1       3.0
        1   rat     4       2.0
        2   rat     0       2.0
        3   dog     6       6.0
        4   cat     5       3.0

我现在希望知道 daily_meal 在每个组中的排名,并将其“映射”/转换为一个名为的新列group_rank。我怎样才能做到这一点?

e.g.

            animals food    daily_meal   group_rank
groups  day         
group1  0   cat     1       1.5          1
        1   cat     2       1.5          1
        2   dog     2       3.5          3
        3   dog     5       3.5          3
        4   rat     3       3.0          2

group2  0   cat     1       3.0          2
        1   rat     4       2.0          1
        2   rat     0       2.0          1
        3   dog     6       6.0          3
        4   cat     5       3.0          2

使用双transform http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.transform.html:

df['daily_meal'] = df.groupby(['animals', 'groups'])['food'].transform('mean')
df['group_rank'] = df.groupby('groups')['daily_meal'].rank(method='dense')
print (df)
           animals  food  daily_meal  group_rank
groups day                                      
group1 0       cat     1         1.5         1.0
       1       cat     2         1.5         1.0
       2       dog     2         3.5         3.0
       3       dog     5         3.5         3.0
       4       rat     3         3.0         2.0
group2 0       cat     1         3.0         2.0
       1       rat     4         2.0         1.0
       2       rat     0         2.0         1.0
       3       dog     6         6.0         3.0
       4       cat     5         3.0         2.0

Or:

s = df.groupby(['animals', 'groups'])['food'].transform('mean')
df['group_rank'] = s.groupby('groups').transform(lambda x: x.rank(method='dense'))
print (df)
           animals  food  group_rank
groups day                          
group1 0       cat     1         1.0
       1       cat     2         1.0
       2       dog     2         3.0
       3       dog     5         3.0
       4       rat     3         2.0
group2 0       cat     1         2.0
       1       rat     4         1.0
       2       rat     0         1.0
       3       dog     6         3.0
       4       cat     5         2.0

Thanks 斯科特·波士顿 https://stackoverflow.com/questions/47775927/pandas-transform-position-rank-in-group/47776077#comment82513404_47776077改进解决方案:

df['daily_meal'] = df.groupby(['animals', 'groups'])['food'].transform('mean')
df['group_rank'] = df.groupby('groups')['daily_meal'].rank(method='dense')

s = df.groupby(['animals', 'groups'])['food'].transform('mean')
df['group_rank'] = s.groupby('groups').rank(method='dense')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

熊猫改变群体中的位置/排名 的相关文章

随机推荐

  • ios 上的外部键盘选项卡事件

    我的 iPad 应用程序屏幕之一有多个文本字段 在这几个文本字段上 会生成用于用户输入操作 决策 预填充信息等的弹出窗口 当使用默认的 ipad 键盘时 它工作正常 但是当我们尝试使用带有 Tab 键的外部键盘时 我得到了多个文本字段应该开
  • 用于闪亮 Python 3D 曲面图的 Phong 着色

    我正在尝试在 Python 中使用镜面着色创建美观的 3D 绘图 到目前为止 我已尝试将 Matplotlib 与 Mayavi 的 3D 轴和曲面图一起使用 例如来自 Mayavi surf 示例网页 结果看起来不错 在 Mayavi 中
  • 自动同步 Subversion 存储库和 Git 存储库

    我的项目在网络文件系统上有一个 Subversion 存储库 新团队希望使用 Git 访问它 并能够提交它并从中获取更新 我的想法是创建一个新的裸git svn在同一网络文件系统上克隆 Subversion 存储库 并确保这两个存储库始终彼
  • 如何更改附加到导航视图的子菜单的文本和图标的颜色?

    我试图弄清楚如何更改实际附加到导航视图的子菜单项的颜色 以下代码实际上来自 android studio 中可用的导航抽屉的默认模板 活动 主 抽屉 xml menu menu
  • 哪里有 Firefox 3.5 中位置感知浏览的 Javascript 代码示例?

    有谁知道我在哪里可以找到 Firefox 3 5 的新位置感知功能的一些 javascript 代码示例 Try hacks mozilla org http hacks mozilla org 2009 06 geolocation an
  • 检查两次之间的时间[重复]

    这个问题在这里已经有答案了 我只想检查当前时间是否在 2 次之间 到目前为止 我浏览了多个脚本 但所有脚本都包含日期 或者只是太困难 或者脚本只计算完整小时 如 6 或 7 而我需要检查小时和分钟 我很感激您的帮助 我想要的脚本设置是 be
  • 在 Elastic Beanstalk 上运行 npm install 时出现问题

    情况 我有一个 Laravel 5 4 应用程序 它使用 npm bower 和 gulp 作为前端 我已在部署时成功配置了所有内容 但是npm install or npm install production 在我的情况下是相同的 命令
  • jwt.decode() 收到意外的关键字参数“verify”

    我可以使用路由 api token 生成令牌 但之后无法使用它 之前一切正常 但现在我在 django Rest Framework 中遇到此错误 我不知道为什么 File home mathieu local share virtuale
  • Android - Intent.setType() 参数

    有谁知道该方法的所有可用参数 像 图像 或 文件 我在官方文档中没有找到该列表的线索 具体来说 我需要发送联系人 vcf 文件的意图 但输入 file vcf 并没有显示通过短信发送选项 sendIntent setData Uri par
  • 在php中读取mp3流并回显给客户端

    我想要实现的是一个页面 当客户端连接时 该页面不断地从本地ice cast服务器读取 http 127 0 0 1 8000 stream mp3 并将流回显给客户端 从那里 客户端可以在基本音频标签中播放它
  • 在 Ruby 语言的一个 if 语句中使用多个条件

    我用 Ruby 写了这样的东西 if a max a 0 brand b 0 elsif a max a 1 brand b 1 elsif a max a 2 brand b 2 elsif a max a 3 brand b 3 end
  • 使用 JSDoc 记录成员函数

    我有这样的事情 Diese Klasse bla bla constructor my namespace ClassA function type This function does something this doSomething
  • 正确实施带有回发的 Web 部件?

    我想做的是创建一个 Web 部件 它有一个文本框 您可以在其中设置 Web 部件上的文字 h2 的值 以及一个回发的 保存 按钮 然后相应地设置文字 这有一个巨大的警告 当页面在回发后加载时 文字并没有改变 但是 如果我记录文字中实际设置的
  • 当日期采用以下格式时,将 BIGQUERY 中的字符串转换为日期:M/D/YYYY

    我有一个日期字符串 格式为 M D YYYY 即 1 1 2018 12 31 2018 我收到无效日期错误 它显示 2 18 2018 作为无效日期 有任何想法吗 以下是 BigQuery 标准 SQL 的示例 standardSQL W
  • 从 C 执行二进制机器代码

    下列的this http www muppetlabs com breadbox software tiny teensy html我已经成功地生成了大小为 528 字节的 a out 当 gcc main c 最初给了我 8539 字节的
  • 使用日期时间 POSIXlt 创建 R data.table 时出错

    使用日期时间列创建 data table 时出现问题 gt mdt lt data table id 1 3 d strptime c 06 02 36 06 02 48 07 03 12 H M S gt class mdt 1 data
  • Material-Ui TextField 不受 RTL 方向影响

    我在我的 React 项目中使用 Material Ui 我按照中的步骤操作文档 https material ui com guides right to left opting out of rtl transformation允许 R
  • Python 中的 HTTP 请求和 JSON 解析[重复]

    这个问题在这里已经有答案了 我想通过 Google Directions API 动态查询 Google 地图 例如 此请求计算从伊利诺伊州芝加哥经密苏里州乔普林和俄克拉荷马州俄克拉荷马城的两个航路点到加利福尼亚州洛杉矶的路线 它返回一个结
  • 如何使用 google eclipse 插件创建带有应用程序引擎模块的 gwt gae

    如何使用 Java 中的 google eclipse 插件创建带有模块的新 GWT 和 GAE 项目 我尝试使用 eclipse 创建一个新的 Web 应用程序 但它只是创建了一个没有模块的 GWT 和 GAE 项目 Thanks 您可能
  • 熊猫改变群体中的位置/排名

    我有以下内容DataFrame两组动物以及它们每天吃多少食物 df pd DataFrame animals cat cat dog dog rat cat rat rat dog cat food 1 2 2 5 3 1 4 0 6 5