首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在熊猫中使用groupby()进行数据处理会导致索引错误

在熊猫中使用groupby()进行数据处理会导致索引错误
EN

Stack Overflow用户
提问于 2022-01-02 22:50:16
回答 2查看 355关注 0票数 2

我有这个dataframe

代码语言:javascript
复制
      x        y        z        parameter     
0     26       24       25       Age
1     35       37       36       Age  
2     57       52       54.5     Age
3     160      164      162      Hgt           
4     182      163      172.5    Hgt             
5     175      167      171      Hgt              
6     95       71       83       Wgt     
7     110      68       89       Wgt     
8     89       65       77       Wgt 

我使用pandas来获得的最终结果

代码语言:javascript
复制
      x        y        parameter     
0     160      164      Hgt           
1     182      163      Hgt             
2     175      167      Hgt 

我使用groupby()根据相同参数Hgt从原始dataframe中提取和隔离行

首先,我添加了一列,将其设置为index

df = df.insert(0,'index', [count for count in range(df.shape[0])], True)

dataframe的出现是这样的:

代码语言:javascript
复制
      index    x        y        z        parameter     
0     0        26       24       25       Age
1     1        35       37       36       Age  
2     2        57       52       54.5     Age
3     3        160      164      162      Hgt           
4     4        182      163      172.5    Hgt             
5     5        175      167      171      Hgt              
6     6        95       71       83       Wgt     
7     7        110      68       89       Wgt     
8     8        89       65       77       Wgt 

然后,我使用以下代码对基于index的列进行分组并提取所需的列:

df1 = df.groupby('index')[['x', 'y','parameter']]

产出如下:

代码语言:javascript
复制
      x        y        parameter     
0     26       24       Age
1     35       37       Age  
2     57       52       Age
3     160      164      Hgt           
4     182      163      Hgt             
5     175      167      Hgt              
6     95       71       Wgt     
7     110      68       Wgt     
8     89       65       Wgt   

之后,我只使用以下代码隔离Hgt值:

df2 = df1[df1['parameter'] == 'Hgt']

当我运行df2时,我发现了一个错误:

IndexError: Column(s) ['x', 'y', 'parameter'] already selected

我是不是漏掉了什么?如何获得最终结果

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-03 00:53:43

因为你问你做错了什么,让我指出无用的/坏的代码。

没有任何判断(这只是为了帮助您改进未来的代码),几乎所有的事情都是不正确的。这感觉就像一连串复杂的方法去做无用的事情。让我详细介绍一下:

代码语言:javascript
复制
df = df.insert(0,'index', [count for count in range(df.shape[0])], True)

这似乎是一种非常复杂的df.reset_index()方式。即使是[count for count in range(df.shape[0])]也可以通过直接使用range(df.shape[0])来简化。

但是groupby甚至不需要这个步骤,因为您可以按索引级别进行分组:

代码语言:javascript
复制
df.groupby(level=0)

但是..。无论如何,groupby是无用的,因为您只有一个成员组。

此外,当你这样做时:

代码语言:javascript
复制
df1 = df.groupby('index')[['x', 'y','parameter']]

df1不是,不是,而是DataFrameGroupBy对象。当您知道要做什么时,将其存储在变量中是非常有用的,但是,这在您的情况下会导致错误,因为您认为这是一个DataFrame。您需要应用DataFrameGroupBy对象的聚合或转换方法来获得一个DataFrame,而您没有这样做(很可能是因为,如上面所示,在单成员组上没有什么有趣的事情可做)。

所以当你跑步时:

代码语言:javascript
复制
df1[df1['parameter'] == 'Hgt']

同样,一切都是错误的,因为df1['parameter']等同于df.groupby('index')[['x', 'y','parameter']]['parameter'] (当您选择两次“参数”时,错误的原因)。即使删除了此错误,等式比较也会给出单个True/False,因为您仍然拥有DataFrameGroupBy而不是DataFrame,这将错误地尝试对不存在的DataFrameGroupBy列进行子选择。

希望能帮上忙!

票数 2
EN

Stack Overflow用户

发布于 2022-01-02 23:07:35

你真的需要groupby

代码语言:javascript
复制
>>> df.loc[df['parameter'] == 'Hgt', ['x', 'y', 'parameter']].reset_index(drop=True)
     x    y parameter
0  160  164       Hgt
1  182  163       Hgt
2  175  167       Hgt
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70560335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档