在pandas中分组后排除列

问题描述 投票:0回答:1

所以我想知道为什么以下是不可能的,以及如何绕过它。

我采用了一个数据框,按一列分组,并将其设置为一个新变量。现在我想对该数据框执行某些操作并产生错误

df = pd.DataFrame({'group':list('aaaabbbb'),
                   'val':[1,3,3,2,5,6,6,2],
                   'id':[1,1,2,2,2,3,3,3]})
df    
newdf = df.groupby("group")
newdf.loc[:, newdf.columns != 'val']

df = pd.DataFrame({'group1':list('aaaabbbb'),
                   'group2':list('ccccbbbb'),
                   'val':[1,3,3,2,5,6,6,2],
                   'id':[1,1,2,2,2,3,3,3]})
df    
newdf = df.groupby(["group1","group2"])
newdf.loc[:, newdf.columns != 'val']


AttributeError: Cannot access callable attribute 'loc' of 'DataFrameGroupBy' objects, try using the 'apply' method

我使用这两个数据帧来创建如下所示的iqr

Q1 = df1.quantile(0.15)
Q3 = df1.quantile(0.85)
IQR = Q3 - Q1
df1 = pd.DataFrame(IQR).reset_index()
python pandas
1个回答
1
投票

您需要使用groupby指定聚合函数,例如sum。此外,您可能希望结果为pd.DataFrame而不设置groupby列的索引。这可以通过设置as_index=False来实现。

试试这个:

import pandas as pd

df = pd.DataFrame({'group1':list('aaaabbbb'),
                   'group2':list('ccccbbbb'),
                   'val':[1,3,3,2,5,6,6,2],
                   'id':[1,1,2,2,2,3,3,3]})

newdf = df.groupby(['group1', 'group2'], as_index=False).sum()
newdf.loc[:, newdf.columns != 'val']

一种更详细地证明这一点的方法:

newdf = df.groupby(['group1', 'group2'])
print(type(newdf))        # <class 'pandas.core.groupby.DataFrameGroupBy'>
print(type(newdf.sum()))  # <class 'pandas.core.frame.DataFrame'>
© www.soinside.com 2019 - 2024. All rights reserved.