RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1329409
Accepted
SergFSM
SergFSM
Asked:2022-09-17 19:15:23 +0000 UTC2022-09-17 19:15:23 +0000 UTC 2022-09-17 19:15:23 +0000 UTC

分组DataFrame时如何更改级别的层次结构?

  • 772

假设我们有一个这样的 DataFrame:

samp = pd.DataFrame({'region': ['North','North','South','South','East','East','West','West'], 
                     'store': list('ABCDEFGH'), 
                     'num': 100, 
                     'year':['2020','2020','2021','2021','2021','2021','2020','2021']})
  region store  num  year
0  North     A  100  2020
1  North     B  100  2020
2  South     C  100  2021
3  South     D  100  2021
4   East     E  100  2021
5   East     F  100  2021
6   West     G  100  2020
7   West     H  100  2021

需要按行对地区数据进行分组,按列对年份进行分组。

我通过 pivot_table or 来执行此操作groupby,这给出了相同的结果。或多或少是这样的:

pd.pivot_table(samp, index='region', columns='year',values=['store','num'],
                   aggfunc={'store': 'count','num':'sum'})
samp.groupby(['region','year']).agg(
           total_num=("num","sum"), 
           stores=("store", "count")).unstack()

我们以以下形式在输出中获得必要的数据:

         total_num      stores     
year     2020   2021    2020 2021
region                             
East      NaN  200.0    NaN  2.0
North   200.0    NaN    2.0  NaN
South     NaN  200.0    NaN  2.0
West    100.0  100.0    1.0  1.0

是否可以以某种方式更改分组顺序(层次结构?)以获取这种形式的数据(即按年份对列进行分组):

       2020                2021
values total_num  stores   total_num  stores
region                             
East         NaN     NaN        200.0    2.0
North      200.0     2.0          NaN    NaN
South        NaN     NaN        200.0    2.0
West       100.0     1.0        100.0    1.0

在 Excel 数据透视表中,只需轻轻移动鼠标即可完成此操作,但在这里我找不到以这种形式显示数据的方法。swaplevel基本上不会改变任何东西。

这可以以某种方式完成吗?

python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    MaxU - stop genocide of UA
    2022-09-17T20:17:14Z2022-09-17T20:17:14Z

    使用DataFrame.swaplevel()和DataFrame.sort_index():

    res = (samp
           .groupby(['region','year'])
           .agg(total_num=("num","sum"),stores=("store", "count"))
           .unstack()
           .swaplevel(axis=1)
           .sort_index(axis=1))
    

    结果:

    In [60]: res
    Out[60]:
    year     2020             2021
           stores total_num stores total_num
    region
    East      NaN       NaN    2.0     200.0
    North     2.0     200.0    NaN       NaN
    South     NaN       NaN    2.0     200.0
    West      1.0     100.0    1.0     100.0
    
    • 4

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5