Python 如何在熊猫中按分组进行筛选

Python 如何在熊猫中按分组进行筛选,python,pandas,Python,Pandas,我是熊猫的新手。我有以下数据集。 将数据集视为公司的部门(“k1”)和人员(“k2”) dframe = pd.DataFrame({'k1': ['X','X','Y','Y','Z','Z'], ...: 'k2': ['P1','P2','P3','P4','P5','P6'], ...: 'dataset1': np.random.randn(6)}) ...: 如果我取

我是熊猫的新手。我有以下数据集。 将数据集视为公司的部门(“k1”)和人员(“k2”)

dframe = pd.DataFrame({'k1': ['X','X','Y','Y','Z','Z'],
   ...:                         'k2': ['P1','P2','P3','P4','P5','P6'],
   ...:                          'dataset1': np.random.randn(6)})
   ...:
如果我取按部门/k1分组的平均值,我得到以下结果

   dataset1
k1
X   0.153825
Y  -0.648500
Z   1.133334
In [6]: dframe.groupby('k2').mean()
Out[6]:
    dataset1
k2
P1  1.595455
P2 -1.287805
P3  0.211858
P4 -1.508859
P5  1.350336
P6  0.916332
如果我取按人/k2分组的平均值,我得到以下结果

   dataset1
k1
X   0.153825
Y  -0.648500
Z   1.133334
In [6]: dframe.groupby('k2').mean()
Out[6]:
    dataset1
k2
P1  1.595455
P2 -1.287805
P3  0.211858
P4 -1.508859
P5  1.350336
P6  0.916332
我的问题是如何只过滤按人员/k2分组的平均值,该值大于它所属的dept/k1的平均值。e、 g.P1平均值大于其所属的X平均值

Out[6]:
    dataset1
k2
P1  1.595455
P3  0.211858
P5  1.350336
样本(将
P6
更改为
P5
):

首先通过和创建新列:

然后按
mean
进行聚合,并且还需要将
k1
列添加到
groupby
中,以避免在另一个
k1
中出现相同的
k2
时输出错误

dframe = dframe.groupby(['k1','k2']).agg({'dataset1':'mean', 'meank1':'first'})
print (dframe)
         meank1  dataset1
k1 k2                    
X  P1  0.143348  0.026375
   P2  0.143348  0.260322
Y  P3 -0.299723 -0.395146
   P4 -0.299723 -0.204301
Z  P5 -1.934256 -1.934256
由或进行最后筛选:

如果要删除第一级
多索引
添加:

对于索引中的列,请使用:

dframe = dframe.reset_index(level=0, drop=True).reset_index()
print (dframe)
   k2  dataset1
0  P1  0.026375
1  P3 -0.395146

非常感谢,耶斯雷尔。我明白了转化的作用。美丽
dframe = dframe.reset_index(level=0, drop=True)
print (dframe)
    dataset1
k2          
P1  0.026375
P3 -0.395146
dframe = dframe.reset_index(level=0, drop=True).reset_index()
print (dframe)
   k2  dataset1
0  P1  0.026375
1  P3 -0.395146