Pandas`DataFrameGroupBy`和`SeriesGroupBy`

2024-06-17 09:57:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我承认我不是Python专家,但我仍然发现处理Pandas DataFrameGroupBy和{}对象异常违反直觉。(我有R背景。)

我有下面的数据帧:

import pandas as pd
import numpy as np
df = pd.DataFrame({'id' : range(1,9),
                   'code' : ['one', 'one', 'two', 'three',
                             'two', 'three', 'one', 'two'],
                   'colour': ['black', 'white','white','white',
                           'black', 'black', 'white', 'white'],
                   'irrelevant1': ['foo', 'foo', 'foo','bar','bar',
                                     'foo','bar','bar'],
                   'irrelevant2': ['foo', 'foo', 'foo','bar','bar',
                                     'foo','bar','bar'],
                   'irrelevant3': ['foo', 'foo', 'foo','bar','bar',
                                     'foo','bar','bar'],
                   'amount' : np.random.randn(8)},  columns= ['id','code','colour', 'irrelevant1', 'irrelevant2', 'irrelevant3', 'amount'])

我希望能够得到按code和{}分组的id。下面的代码进行分组,但保留所有列。在

^{pr2}$

问题:

1)gb中,我如何只存储id列(甚至没有任何索引)并去掉其余的?在

2)一旦我得到了想要的DataFrameGroupBygb,我如何访问{code=1和colour=white}的{}?我尝试了gb.get_group('one','white')和{},但它们都不起作用。在

3)如何访问{colour=white},即缺少{}索引的条目?在

4)最后,manual不是很有帮助,你知道有什么来源的例子可以说明如何创建和访问这些分组对象吗?在


Tags: 对象importidfooasnpbarcode
1条回答
网友
1楼 · 发布于 2024-06-17 09:57:30

对于您的问题,您甚至不需要执行groupby(但是您应该在prose docs中阅读更多关于它的内容。在

更好的解决方案是MultiIndex

In [36]: df = df.set_index(['code', 'colour']).sort_index()

In [37]: df
Out[37]: 
              id irrelevant1 irrelevant2 irrelevant3    amount
code  colour                                                  
one   black    1         foo         foo         foo  0.103045
      white    2         foo         foo         foo  0.751824
      white    7         bar         bar         bar -1.275114
three black    6         foo         foo         foo  0.311305
      white    4         bar         bar         bar -0.416722
two   black    5         bar         bar         bar  1.534859
      white    3         foo         foo         foo -1.068399
      white    8         bar         bar         bar -0.243893

[8 rows x 5 columns]

这就解决了1。在

2:使用熟悉的切片语法:

^{pr2}$

3:这是一个横截面,使用.xs

In [39]: df.xs('white', level='colour')
Out[39]: 
       id irrelevant1 irrelevant2 irrelevant3    amount
code                                                   
one     2         foo         foo         foo  0.751824
one     7         bar         bar         bar -1.275114
three   4         bar         bar         bar -0.416722
two     3         foo         foo         foo -1.068399
two     8         bar         bar         bar -0.243893

[5 rows x 5 columns]

4:例子比比皆是。检查这里的pandas/groupby标记,this文档的部分是worked on right now,上面链接的散文文档。在

相关问题 更多 >